Qt问题 - 关闭模态QDialog后释放鼠标按钮

时间:2012-10-12 03:45:03

标签: qt mouseevent qwidget qdialog

在Modal QDialog关闭后,父窗口小部件不响应第​​一次鼠标单击,在mousemoveevent()中调用done()关闭QDialog,这导致在关闭对话框后仍然按下鼠标按钮,第二次单击将继续正常工作。

到目前为止我的发现:

  1. 如果在done(int)中调用了MouseReleaseeEvent(),则一切都按预期工作

  2. 似乎QDialog缺少MouseButtonRelease事件(由于MouseButtonPress事件已被关闭,因此QDialog已被关闭MouseMoveEvent这会弄乱父窗口小部件的鼠标事件。

  3. 我的目的是制作一个可以通过滑动关闭的QDialog,当它检测到鼠标被按下并移动到某个位置时,它将被关闭。

    非常感谢所有以前遇到过这种情况的人,或者知道发生了什么的人给我一些建议。

    非常感谢。

    此外,这是我第一次在这里发帖提问,如果我错过了我想提供的任何信息,请告诉我......

1 个答案:

答案 0 :(得分:0)

这很完美,没有任何动画,但可以添加。基本上它的作用是在鼠标开始移动时寻找x坐标的差异,如果它高于或低于2(向左或向右滑动)它将关闭对话框。

int x;

void MyDialog::mousePressEvent(QMouseEvent * event) {
    x = event->globalPos().x();
}

void MyDialog::mouseReleaseEvent(QMouseEvent * event) {
    int diff = x - event->globalPos().x();
    qDebug(tr("released").arg(diff).toUtf8().constData());
    if (diff > 2 || diff < -2) QDialog::close();
}

我没有看到任何问题。