#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QMouseEvent>
#include <QGraphicsSceneMouseEvent>
#include <QApplication>
class GraphicsView : public QGraphicsView{
protected:
// void mousePressEvent(QMouseEvent *event) override
// {
// //qDebug() << "GraphicsView" << "mousePressEvent";
// QGraphicsView::mousePressEvent(event);
// event->ignore();
// }
};
class GraphicsScene : public QGraphicsScene{
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event) override
{
qDebug() << "GraphicsScene" << "mousePressEvent";
//QGraphicsScene::mousePressEvent(event);
}
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) override
{
qDebug() << "GraphicsScene" << "mouseReleaseEvent";
}
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouseEvent) override
{
qDebug() << "GraphicsScene" << "mouseDoubleClickEvent";
mouseEvent->ignore();
}
};
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QGraphicsView *w = new GraphicsView();
//w->setAttribute(Qt::WA_TransparentForMouseEvents);
QGraphicsScene *scene = new GraphicsScene();
setCentralWidget(w);
w->setScene(scene);
qDebug() << QApplication::doubleClickInterval();
QApplication::setDoubleClickInterval(500);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::keyPressEvent(QKeyEvent *)
{
qDebug() << "MainWindow::keyPressEvent";
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
qDebug() << "MainWindow" << "mousePressEvent";
QWidget::mousePressEvent(event);
//close();
}
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
qDebug() << "MainWindow" << "mouseReleaseEvent";
QWidget::mouseReleaseEvent(event);
}
void MainWindow::mouseDoubleClickEvent(QMouseEvent *event)
{
qDebug() << "MainWindow" << "mouseDoubleClickEvent";
QWidget::mouseDoubleClickEvent(event);
}
- 实验得出在QGraphicsScene中,如果触发mouseDoubleClickEvent事件,意味着,触发顺序是(mousePressEvent,mouseReleaseEvent, mouseDoubleClickEvent, mouseReleaseEvent)而在,QWidget中,
是 (mousePressEvent, mouseReleaseEvent, mouseDoubleClickEvent,mousePressEvent,mouseReleaseEvent)。 - 在QGraphicsScene中只要触发一个mouseDoubleClickEvent,就会丢掉一个mousePressEvent