Seite 1 von 1

MouseEvents werden nicht ausgelöst

Verfasst: 10. Juli 2011 07:37
von CBM
Hallo,

wird in meinem QListWidget ein MouseMoveEvent ausgeführt soll die überschriebenen virtuelle Funktion MouseMoveEvent ausgeführt werden. Jedoch wird der Event nicht ausgeführt, bzw. die Funktion "Meine_Klasse_Liste::mouseMoveEvent" wird nie ausgeführt Auch habe ich es schon mit anderen Events (MouseReleaseEvent etc.) ausprobiert, bei denen es auch nicht klappt.
Es riecht zwar förmlich danach, dass ich irgendwo vielleicht noch sowas wie ein accept oder enabled setzen muss. Ich komme jedoch einfach nicht drauf. Dank vorab für eure Hilfe/Anregungen.

Code: Alles auswählen

#ifndef MOUSEEVENTPROBLEM_H
#define MOUSEEVENTPROBLEM_H

#include <QtGui/QWidget>

class Meine_Klasse_Liste : public QWidget
{
    Q_OBJECT

public:
    Meine_Klasse_Liste(QWidget *parent = 0);
    ~Meine_Klasse_Liste();
protected:
	void mouseMoveEvent(QMouseEvent *event);
private:
};

#endif // MOUSEEVENTPROBLEM_H

Code: Alles auswählen

#include "mouseeventproblem.h"
#include <QListWidget>
#include <QMessageBox>

Meine_Klasse_Liste::Meine_Klasse_Liste(QWidget *parent) : QWidget(parent)
{
	QListWidget *liste = new QListWidget(this);

	liste->setDragDropMode(QAbstractItemView::DragOnly);
	QStringList text;
	text << "Alexander" << "Peter" << "Karl";
	liste->addItems(text);
}

void Meine_Klasse_Liste::mouseMoveEvent(QMouseEvent *event){
	QMessageBox msg;
	msg.setText("Hallo");
	msg.exec();
}

Meine_Klasse_Liste::~Meine_Klasse_Liste() {}


Verfasst: 10. Juli 2011 09:58
von Christian81
Siehe Doku
If mouse tracking is switched off, mouse move events only occur if a mouse button is pressed while the mouse is being moved. If mouse tracking is switched on, mouse move events occur even if no mouse button is pressed.
Für alles andere -> minimal kompilierbares Beispiel...

Verfasst: 10. Juli 2011 10:24
von CBM
besten Dank. Ich habe bislang schon alles möglich was ich aus der Doku ziehen konnte auch ausprobiert (accept, acceptPropsedAction, etc.). So auch schon "liste->setMouseTracking(true);". Wollte hier aber wegen der Übersichtlichkeit nicht alle meine Fehlschläge einzeln auflisten. Habe es jetzt natürlich nochmals mit " liste->setMouseTracking(true);" ausprobiert. Geht aber wirklich (noch) nicht.

Mit "liste->setMouseTracking(true);" sieht meine Implementierung in der cpp so aus:

Code: Alles auswählen

Meine_Klasse_Liste::Meine_Klasse_Liste(QWidget *parent) : QWidget(parent)
{
	QListWidget *liste = new QListWidget(this);
	liste->setDragDropMode(QAbstractItemView::DragOnly);
	liste->setMouseTracking(true); // <<---- NEU
	QStringList text;
	text << "Alexander" << "Peter" << "Karl";
	liste->addItems(text);
}
Aber natürlich hast du recht, nach Doku muss dass einfach rein. Aber was mache ich falsch, da es ja immer noch nicht klappt?

Für alles andere -> minimal kompilierbares Beispiel...
Du meinst, alles in eine main.cpp reinschreiben, für einfacheres Copy&Paste aus dem Forum? Mach/versuch ich.

Verfasst: 10. Juli 2011 10:27
von upsala
Nein, kein Copy&Paste. ZIP-File, nur das notwendigeste rein und anhängen.

Verfasst: 10. Juli 2011 10:33
von Christian81
Abgesehen davon aktivierst du das Mouse-Tracking im QListView, das mosueMoveEvent hast du aber in Meine_Klasse_Liste überschrieben.

Verfasst: 10. Juli 2011 10:37
von franzf
upsala hat geschrieben:nur das notwendigeste rein
Das heißt
1) NUR die Source-Files (.h/.cpp), die zum Kompilieren notwendig sind. Keine Libraries (insbesondere die Qt-Libs), keine Executables, usw.
2) Alles auf ein Minimum - sprich die "Problemumgebung" - reduziert.
3) Falls du irgendwelche speziellen CXXFLAGS setzt, wäre ein .pro/CMakeLists.txt nicht schlecht.
4) ES MUSS KOMPILIEREN! Das ist besonders wichtig. Also: vorher ausprobieren.

Verfasst: 10. Juli 2011 10:40
von CBM
Christian81 hat geschrieben:Abgesehen davon aktivierst du das Mouse-Tracking im QListView, das mosueMoveEvent hast du aber in Meine_Klasse_Liste überschrieben.
Autsch :oops: . Irgendwie war es die ganze Zeit klar, aber der Kopf hat blockiert. Besten Dank!

Verfasst: 10. Juli 2011 10:53
von Christian81
Der Grund warum wir immer ein minimales Beispiel wollen ist genau dieser - irgendwo hat der Fragensteller einen kleinen Fehler eingebaut den wir entweder nicht sehen oder gar nicht sehen können. Baut er dann ein kleines Beispiel in dem nur das Problem beschrieben ist, kommt er meist selbst auf das Problem und lernt dabei noch etwas. Und falls nicht können wir mit genau der gleichen Grundlage am Problem arbeiten und wir reden nicht aneinander vorbei. Ist also nicht zur Gängelung der User :)