QPushButton в QGraphicsScene требует двойного клика вместо одного клика - PullRequest
0 голосов
/ 05 июня 2018

Мне нужен кто-то, чтобы объяснить мне, когда у меня есть qGraphicsScene с

void myGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent* event){
 qDebug()<<event->scenePos();
}

, и у меня есть qPushButton в qGraphicsScene с

myGraphicsScene::myGraphicsScene(){
QPushButton* pushButton = new QPushButton();
addWidget(pushButton);
connect(pushButton, SIGNAL(clicked()), this,SLOT(doSomething()))
}

Когда я нажимаю кнопку:

  • qDebug показывает мне позицию.
  • Соединение игнорируется.

Когда я дважды щелкаю кнопку:

  • qDebug показывает мне положение
  • "Theнить 0x15b4 вышла с кодом 0 (0x0) "
  • doSomething() функция будет запущена.

Кто-нибудь может объяснить мне семантику?Спасибо.

1 Ответ

0 голосов
/ 05 июня 2018

mousePressEvent в документации Qt:

Реализация по умолчанию зависит от состояния сцены.Если есть элемент захвата мыши, то событие отправляется захватчику мыши.В противном случае он перенаправляется на самый верхний видимый элемент, который принимает события мыши в позиции сцены от события, и этот элемент быстро становится элементом захвата мыши.

Так что если вы переопределите его, как вы это сделалив вашем коде событие больше не отправляется захвату мыши (вашей кнопке), но при двойном щелчке это событие не перехватывается mousePressEvent (но обычно mouseDoubleClickEvent), и кнопка активируется только одна, потому что первое нажатие мышиигнорируется, чтобы определить, является ли это простым щелчком или двойным щелчком.

надеюсь, это поможет вам.


Обновление: чтобы решить вашу проблему, просто измените mouseMoveEvent на:

void mousePressEvent(QGraphicsSceneMouseEvent* event){
    qDebug()<<event->scenePos();
    QGraphicsScene::mousePressEvent(event);
}

Но я советую вам создать подкласс QGraphicsView и перегружать его метод mousePressEvent.

Надеюсь, это вам поможет.

...