0

模态QDialog关闭后,父小部件不响应第​​一次鼠标单击,通过在mousemoveevent()中调用done()关闭QDialog,这导致对话框关闭后鼠标按钮仍被按下,第二次单击将起作用像平常一样。

到目前为止我的发现:

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

  2. 似乎QDialog缺少MouseButtonRelease事件(在MouseButtonPress事件触发后预期),因为QDialog已经在 中关闭,MouseMoveEvent这会弄乱父小部件的鼠标事件。

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

如果以前遇到过它或知道发生了什么的每个人都可以给我一些建议,我们将不胜感激。

非常感谢。

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

4

1 回答 1

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();
}

我看不出有什么问题。

于 2012-10-22T08:43:20.057 回答