在P2中,我检查左键单击条件并执行代码(如果为真)。好吧,当我离开或右键单击时,它不会执行代码。如果我更改条件以检查右键单击并返回如果为true,则左键单击正常,但右键单击不会返回。如果我删除条件,左右键都会运行代码。
我正在失去理智,因为像这样的蠢事一直在发生,我不知道为什么即使我做的一切都与其他有效的程序一样(我写的)。
编辑:它似乎忽略了mouseRelease函数中的if-check,并且对mousePress和mouseMove正常工作。
P1(这个程序完全符合我的要求):
void GLWidget::mousePressEvent(QMouseEvent *event)
{
clickOn = event->pos();
clickOff = event->pos();
// right mouse button
if (event->buttons() & Qt::RightButton){
return;
}
// rest of left-click code here
}
/*************************************/
void GLWidget::mouseReleaseEvent(QMouseEvent *event)
{
clickOff = event->pos();
// right mouse button shouldn't do anything
if (event->buttons() & Qt::RightButton)
return;
// rest of left click code here
}
/*************************************/
void GLWidget::mouseMoveEvent(QMouseEvent *event)
{
clickOff = event->pos();
// do it only if left mouse button is down
if (event->buttons() & Qt::LeftButton) {
// left click code
updateGL();
} else if(event->buttons() & Qt::RightButton){
// right mouse button code
}
}
P2(结构类似于P1,但无法正常工作):
void GLWidget::mousePressEvent(QMouseEvent *event)
{
clickOn = event->pos();
clickOff = event->pos();
// do it only if left mouse button is down
if (event->buttons() & Qt::LeftButton) {
// left click code
}
}
void GLWidget::mouseReleaseEvent(QMouseEvent *event)
{
clickOff = event->pos();
// do it only if left mouse button is down
if (event->buttons() & Qt::LeftButton) {
// left click code
}
}
void GLWidget::mouseMoveEvent(QMouseEvent *event)
{
clickOff = event->pos();
clickDiff = clickOff - clickOn;
// do it only if left mouse button is down
if (event->buttons() & Qt::LeftButton) {
// left click code
updateGL();
}
}
答案 0 :(得分:3)
来自QMouseEvent::buttons() documentation:
对于鼠标释放事件,这会排除导致事件发生的按钮。
所以解决方法是使用QMouseEvent :: button()代替:
void GLWidget::mouseReleaseEvent(QMouseEvent *event)
{
clickOff = event->pos();
// do it only if left mouse button is down
if (event->button() == Qt::LeftButton) {
// left click code
}
}