【问题标题】:Qt Main window loosing focus and going to background unexpectedlyQt主窗口失去焦点并意外进入后台
【发布时间】:2014-05-16 15:19:58
【问题描述】:

随着学习曲线的上升,到目前为止一切都变得有意义,除了这个:

我有一个主窗口,我可以在其中调用一个或多个这样的对话框:

d->setWindowFlags(Qt::CustomizeWindowHint | Qt::Window | Qt::FramelessWindowHint);
d->setGeometry(等...
d->show();

对话框没有绑定到主窗口,它们实际上被设置为显示在主窗口旁边,看起来像一个扩展。

要关闭对话框,我在主窗口上使用鼠标“enterEvent”向将使用 hide() 的对话框发送关闭信号。

void MainWidget::enterEvent(QEvent *event)
{
发出 signal_related_close();
}

这可行,但随机会导致一个非常烦人的问题。当发送信号以关闭对话框时,主窗口将失去焦点并进入后台(在屏幕上的任何应用程序后面)。请注意,它不会最小化,而只会进入后台,就像我说的那样,它是随机的(大约 3 次我这样做)。我似乎找不到模式。

我最初认为信号被搞砸了,而是使用了 dialog::leaveEvent() ,但这并没有帮助。我还尝试使用 dialog::mouseMoveEvent 并使用它来隐藏对话框,但这仍然会随机失去对应用程序的关注。

唯一不会失去焦点的方法是在每个对话框上使用一个按钮,该按钮将启动相同的隐藏命令,但这对我的 UI 来说不是很好。所以看起来使用鼠标 enterEvent/leaveEvent,mouseMoveEvent 会导致随机问题。

以前有人遇到过这个问题吗?知道有什么问题吗?谢谢。

【问题讨论】:

    标签: qt widget focus


    【解决方案1】:

    我无法解释原因,但是当使用 QEvent 或任何与鼠标相关的事件以及递归子小部件时会出现此问题。例如,在父窗口小部件构造函数中使用以下代码:

    ChildWidget c1 = new ChildWidget (this);  
    ChildWidget c2 = new ChildWidget (c1);
    Childwidget c3 = new ChildWidget (c2);
    

    在父窗口小部件中使用 QEvent 会随机使窗口进入背景并失去焦点。

    将所有 ChildWidget 设置为同一个父级可以解决问题。

    【讨论】:

      猜你喜欢
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      相关资源
      最近更新 更多