ich habe das Problem, dass ich Events, die in einer Klasse auftreten (von QLabel abgeleitet), an eine andere Klasse zur Auswertung weiterleiten muss:
Klasse, die Events fowarden soll (ist in einem DLL-Sub-Projekt)
Code: Alles auswählen
class Map : public QLabel
{
Q_OBJECT
public:
Map(QLabel* parent = 0);
[...]
protected:
virtual void paintEvent(QPaintEvent*);
virtual void resizeEvent(QResizeEvent*);
virtual void mousePressEvent(QMouseEvent*);
virtual void mouseReleaseEvent(QMouseEvent*);
virtual void mouseMoveEvent(QMouseEvent*);
virtual void mouseDoubleClickEvent(QMouseEvent*);
[...]
};
Map::Map(QObject* parent)
: QLabel(parent)
{
[...]
setMouseTracking(true);
}
Code: Alles auswählen
class MainWindow : public QMainWindow
{
Q_OBJECT
friend class MapEventFilter;
public:
MainWindow(QObject* parent = 0);
[...]
Map* mapWidget() const;
private:
Map* mMap;
[...]
MapEventFilter* mMapFilter;
};
MainWindow::MainWindow
: QMainWindow(parent)
{
[...]
mMapFilter = new MapEventFilter(this);
// create map widget
mMap = new Map(this);
// install event filter
mMap->installEventFilter(mMapFilter);
[...]
}
Code: Alles auswählen
class MapEventFilter : public QObject
{
public:
MapEventFilter(MainWindow* mw, QObject* parent = 0);
protected:
bool eventFilter(QObject* dist, QEvent* e);
private:
MainWindow* mMainWindow;
Qt::MouseButton mLastButton;
QPointF mLastMousePos;
[...]
};
MapEventFilter::MapEventFilter(MainWindow* mw, QObject* parent)
: mMainWindow(mw), QObject(parent)
{
}
bool MapEventFilter::eventFilter(QObject* dist, QEvent* e)
{
switch (e->>type())
{
case QEvent::MouseButtonPress:
{
QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(e);
switch(mMainWindow->mouseMode())
{
case MainWindow::MM_Info:
// show info of items
mMainWindow->showInfo(mouseEvent->pos());
[...]
}
return true;
case QEvent::MouseButtonRelease:
[...]
case QEvent::MouseMove:
{
QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(e);
mMousePos = mouseEvent->pos();
updateStatusBar(mMousePos);
}
return true;
}
return QObject::eventFilter(dist, e);
}
Die Zeile
Code: Alles auswählen
return trueDeshalb meine Frage:
- Ist es erlaubt, den Event-Filter in einer Klasse zu definieren, die in einer anderen DLL liegt als die Klasse, deren Events weitergeleitet werden sollen?
- Ist es generell ok, die Events einer Klasse komplett in eine andere Klasse zu forwarden (die Alternative wären Signal-/Slots, die aber noch größere Verzögerung haben).
Danke für alle Hinweise & Tipps
AlGaN[/code]