Also ich versuche es einmal
Wenn du die Koordinaten der Maus innerhalb deines Labels haben möchtest, muss auch das Label dir die Position der Maus (über sich selber) mitteilen.
Um dies am besten zu machen, solltest du von QLabel ableiten und die Methode mouseMoveEvent() überschreiben.
Deine Label.h-Datei
Code: Alles auswählen
class MyLabel: public QLabel
{
Q_OBJECT
signals:
void posChanged(QPoint &pos);
public:
MyLabel(QWidget * parent = 0, Qt::WindowFlags f = 0);
protected:
virtual void mouseMoveEvent(QMouseEvent *event);
};
In der ersten Zeile deklariere ich die neue Klasse und sage mit "public QLabel" das ich von QLabel erben möchte.
Anschließend erstelle ich unter "public" einen Konstruktor der Klasse (kann man eigentlich komplett aus der QLabel übernehmen!) und unter protected deklariere ich die Methode mouseMoveEvent(). Da diese in der Basisklasse virtual ist, kann man diese in der abgeleiteten Klasse überschreiben.
Jetzt implementiere ich deine Funktionalität in das mouseMoveEvent():
Deine Label.cpp-Datei
Code: Alles auswählen
MyLabel::MyLabel(QWidget * parent, Qt::WindowFlags f):
QLabel(parent, f)
{}
void MyLabel::mouseMoveEvent(QMouseEvent *event)
{
// hier wird das event der Label-Klasse aufgerufen, damit die Implementation
// bzw. die Funktionalität des Labels erhalten bleibt.
QLabel::mouseMoveEvent(event);
// in diesem Schritt löse ich das in der Klasse deklarierte Signal "posChanged"
// mit der aktuellen Position als Parameter aus.
emit posChanged(event->pos());
}
So das dürfte erst einmal alles auf der Label-Seite sein.
Jetzt musst du nur noch in deiner ImageViewer-Klasse ein Slot schreiben, dass ein "QPoint &" als Parameter erwartet und dann das Signal mit diesem Slot verbinden.
In diesem Slot kannst du dann die x- und y-Koordinate auslesen und in deine statusBar schreiben.
Hoffe das es jetzt etwas ausführlicher/verständlicher war
Wenn du noch Probleme oder Fragen zu der Label-Klasse oder zum Verbinden des Signals mit dem SLOT haben solltest, kannst du ja nochmal fragen.
Gruß
GSoft
Lerne aus den Fehlern Anderer! Du hast nicht die Zeit sie selbst zu machen.