Details
-
Bug
-
Resolution: Unresolved
-
P2: Important
-
None
-
6.6.1
-
None
Description
When a context menu is shown in front of the widget, then press and move real quick on a widget, in `mousePressEvent`, `event->position()` sometimes gives a negative value.
Can reproduce using the code below,
// MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> class MyWidget : public QWidget { Q_OBJECT public: MyWidget(); signals: void contextMenu(const QPoint& pos); public slots: void handleContextMenu(const QPoint& pos); protected: void mousePressEvent(QMouseEvent* event) override; void mouseReleaseEvent(QMouseEvent* event) override; }; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); }; #endif // MAINWINDOW_H
// MainWindow.cpp #include "mainwindow.h" #include <QMenu> #include <QMouseEvent> MyWidget::MyWidget() { setAttribute(Qt::WA_NoMousePropagation); setFocusPolicy(Qt::ClickFocus); setMouseTracking(true); connect(this, &MyWidget::contextMenu, this, &MyWidget::handleContextMenu); } void MyWidget::handleContextMenu(const QPoint& pos) { auto menu = new QMenu(this); menu->setAttribute(Qt::WA_DeleteOnClose); menu->addAction("Action 1"); menu->addAction("Action 2"); menu->addAction("Action 3"); menu->addAction("Action 4"); menu->addAction("Action 5"); menu->popup(mapToGlobal(pos)); } void MyWidget::mousePressEvent(QMouseEvent* event) { emit contextMenu(event->pos()); } void MyWidget::mouseReleaseEvent(QMouseEvent* event) { } MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { setCentralWidget(new MyWidget); resize(200,200); } MainWindow::~MainWindow() {}