bool MiddleClickActionEventFilter::eventFilter(QObject *watched, QEvent *event) { if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease) { QMouseEvent *me = static_cast<QMouseEvent *>(event); if (me->button() == Qt::MiddleButton) { QToolBar *toolBar = qobject_cast<QToolBar *>(watched); QAction *action = toolBar->actionAt(me->pos()); if (action) { if (event->type() == QEvent::MouseButtonPress) { m_lastMiddlePressedAction = action; } else if (event->type() == QEvent::MouseButtonRelease) { if (m_lastMiddlePressedAction == action) { emit actionMiddleClicked(action); } m_lastMiddlePressedAction = nullptr; } } } } return QObject::eventFilter(watched, event); }
void tst_QToolBar::actionGeometry() { QToolBar tb; QAction action1(0); QAction action2(0); QAction action3(0); QAction action4(0); tb.addAction(&action1); tb.addAction(&action2); tb.addAction(&action3); tb.addAction(&action4); tb.show(); #ifdef Q_WS_X11 qt_x11_wait_for_window_manager(&tb); #endif QList<QToolBarExtension *> extensions = tb.findChildren<QToolBarExtension *>(); QRect rect01; QRect rect02; QRect rect03; QRect rect04; QMenu *popupMenu; if (extensions.size() != 0) { QToolBarExtension *extension = extensions.at(0); if (extension->isVisible()) { QRect rect0 = extension->geometry(); QTest::mouseClick( extension, Qt::LeftButton, 0, rect0.center(), -1 ); QApplication::processEvents(); popupMenu = qobject_cast<QMenu *>(extension->menu()); rect01 = popupMenu->actionGeometry(&action1); rect02 = popupMenu->actionGeometry(&action2); rect03 = popupMenu->actionGeometry(&action3); rect04 = popupMenu->actionGeometry(&action4); } } QRect rect1 = tb.actionGeometry(&action1); QRect rect2 = tb.actionGeometry(&action2); QRect rect3 = tb.actionGeometry(&action3); QRect rect4 = tb.actionGeometry(&action4); QVERIFY(rect1.isValid()); QVERIFY(!rect1.isNull()); QVERIFY(!rect1.isEmpty()); QVERIFY(rect2.isValid()); QVERIFY(!rect2.isNull()); QVERIFY(!rect2.isEmpty()); QVERIFY(rect3.isValid()); QVERIFY(!rect3.isNull()); QVERIFY(!rect3.isEmpty()); QVERIFY(rect4.isValid()); QVERIFY(!rect4.isNull()); QVERIFY(!rect4.isEmpty()); if (rect01.isValid()) QCOMPARE(popupMenu->actionAt(rect01.center()), &action1); else QCOMPARE(tb.actionAt(rect1.center()), &action1); if (rect02.isValid()) QCOMPARE(popupMenu->actionAt(rect02.center()), &action2); else QCOMPARE(tb.actionAt(rect2.center()), &action2); if (rect03.isValid()) QCOMPARE(popupMenu->actionAt(rect03.center()), &action3); else QCOMPARE(tb.actionAt(rect3.center()), &action3); if (rect04.isValid()) QCOMPARE(popupMenu->actionAt(rect04.center()), &action4); else QCOMPARE(tb.actionAt(rect4.center()), &action4); }