Qt主窗口失去焦点并意外地进入背景

时间:2014-05-16 15:19:58

标签: qt widget focus

走上学习曲线,到目前为止一切都很有意义,除了这一点:

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

  

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

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

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

  

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

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

我最初认为信号搞砸了,而是使用了一个对话框:: leaveEvent(),但这并没有帮助。我也尝试使用dialog :: mouseMoveEvent并使用它来隐藏对话框,但仍会随机松散对应用程序。

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

以前有人遇到过这个问题吗?知道什么可能是错的吗?谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

在父窗口小部件中使用QEvent将随机使窗口转到背景并松散焦点。

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