QMouseEvent und QScrollArea
Verfasst: 20. November 2010 17:46
Hallo zusammen,
ich habe vor zwei Tagen angefangen mich wieder etwas intensiver mit Qt auseinander zu setzen. Aus diesem Grund habe ich mir ein paar kleine Übungsaufgaben ausgedacht und an einer von Ihnen hänge ich. Vielleicht kann mir hier jemand weiterhelfen?
Ich habe ein Klasse namens ImageFrame, in der ich versuche ein Bild anzuzeigen. Wenn das Bild größer als das Frame ansich ist, entsteht eine QScrollArea.
Was ich nun versuche ist mir die Mausposition beim mousePressEvent auszugeben. Das funktioniert eigentlich wunderbar. Was mir aber aufgefallen ist, dass egal wie weit ich innerhalb der QScrollArea scrolle, ich nur die Positionen innerhalb des imageFrames erhalte. Sprich das Scrollen wird nicht in Betracht gezogen, so dass sich die maximale Position des Mauszeigers aus der Größe des imageFrames ergibt und nicht aus der Größe des Bildes, Hoffe das ist mehr oder weniger verständlich. Hier mal ein Auszug aus dem Code:
Und die imageFrame.h:
In der MainWindow.cpp wird eigentlich nur noch die setImage Funktion aufgerufen, wenn der Button open im Menü geklickt wird. Ich habs eigentlich mit diversen mapTo Funktionen versucht zu lösen, was aber nicht wirklich funktioniert hat.
Ich danke schon mal jedem, der sich die Sache etwas näher anschaut. Sonstigen Code kann ich gerne nachliefern
ich habe vor zwei Tagen angefangen mich wieder etwas intensiver mit Qt auseinander zu setzen. Aus diesem Grund habe ich mir ein paar kleine Übungsaufgaben ausgedacht und an einer von Ihnen hänge ich. Vielleicht kann mir hier jemand weiterhelfen?
Ich habe ein Klasse namens ImageFrame, in der ich versuche ein Bild anzuzeigen. Wenn das Bild größer als das Frame ansich ist, entsteht eine QScrollArea.
Was ich nun versuche ist mir die Mausposition beim mousePressEvent auszugeben. Das funktioniert eigentlich wunderbar. Was mir aber aufgefallen ist, dass egal wie weit ich innerhalb der QScrollArea scrolle, ich nur die Positionen innerhalb des imageFrames erhalte. Sprich das Scrollen wird nicht in Betracht gezogen, so dass sich die maximale Position des Mauszeigers aus der Größe des imageFrames ergibt und nicht aus der Größe des Bildes, Hoffe das ist mehr oder weniger verständlich. Hier mal ein Auszug aus dem Code:
Code: Alles auswählen
#include "ImageFrame.h"
ImageFrame::ImageFrame()
{
createWidget();
}
ImageFrame::ImageFrame(QImage* inputImage)
{
createWidget();
setImage(inputImage);
}
void ImageFrame::setImage(QImage* inputImage)
{
frameImage = inputImage;
imageLabel->setPixmap(QPixmap::fromImage(*frameImage));
imageLabel->adjustSize();
}
void ImageFrame::mousePressEvent(QMouseEvent* event){
origin = (event->pos());
std::cout<<origin.x()<<std::endl;
std::cout<<origin.y()<<std::endl;
}
QImage* ImageFrame::getImage()
{
if (!frameImage->isNull()) {
return frameImage;
} else {
frameImage = new QImage();
return frameImage;
}
}
void ImageFrame::createWidget()
{
frameImage = new QImage();
imageLabel = new QLabel();
imageLabel->setBackgroundRole(QPalette::Dark);
imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
frameScrollArea = new QScrollArea();
frameScrollArea->setBackgroundRole(QPalette::Dark);
frameScrollArea->setWidget(imageLabel);
imageLabel->adjustSize();
frameLayout = new QVBoxLayout();
frameLayout->addWidget(frameScrollArea);
this->setLayout(frameLayout);
}
Code: Alles auswählen
#ifndef IMAGEFRAME_H
#define IMAGEFRAME_H
#include <QFrame>
#include <QWidget>
#include <QtGui>
#include <iostream>
class ImageFrame : public QFrame
{
Q_OBJECT;
public:
ImageFrame();
ImageFrame(QImage* inputImage);
QPoint origin;
void mousePressEvent(QMouseEvent *event);
void setImage(QImage* inputImage);
QImage* getImage();
private:
void createWidget();
QImage* frameImage;
QVBoxLayout* frameLayout;
QScrollArea* frameScrollArea;
QLabel* imageLabel;
};
#endif // IMAGEFRAME_H
Ich danke schon mal jedem, der sich die Sache etwas näher anschaut. Sonstigen Code kann ich gerne nachliefern