1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#include <QtGui>
#include <iostream>
class myWindow :public QMainWindow
{
public :
myWindow()
{
setCentralWidget(new QTextEdit);
}
bool eventFilter ( QObject * watched, QEvent * event )
{
//si l'event est pour un ContextMenu
if (event->type() == QEvent::ContextMenu)
{
QWidget* w = qobject_cast<QWidget*>(watched);
//si watched est une QWIdget
if (w)
{
//cast méchant mais l'on as déjà tester si l'event est déjà un QContextMenuEvent
QContextMenuEvent * ev = (QContextMenuEvent *)event;
//je créé mon menu
QMenu menu;
menu.addAction ("tu");
menu.addAction ("va");
menu.addAction ("bien ?");
//execute le menu.
//mapToGlobal : transforme le point local à w en point global
menu.exec( w->mapToGlobal( ev->pos ()));
return true;
}
}
QMainWindow::eventFilter(watched, event);
}
};
int main(int argc, char **argv) {
QApplication app(argc, argv);
myWindow w;
for (int i =0 ; i<10 ; ++i)
{
QDockWidget * dock = new QDockWidget(QString::number(i));
QLabel * label = new QLabel(QString::number(i));
label->installEventFilter(&w);
dock->setWidget(label);
w.addDockWidget(Qt::LeftDockWidgetArea,dock);
}
w.show();
return app.exec();
} |