所有MDI窗口都处于活动状态

时间:2016-03-31 11:47:20

标签: qt mdi docking qt5.5

我遇到了一个奇怪的问题。我在QMainWindow中有几个MDI窗口并在其中一个MDI中捕获windowStateChanged()以显示/隐藏停靠窗口小部件。这里一切都很好。

但是,如果我尝试将其中一个窗口停靠(不将其添加到mdiArea()),如下所示:

myMDIWindow->setWindowFlags(Qt::Widget | Qt::CustomizeWindowHint |
                            Qt::FramelessWindowHint);

// Create dock window and put my mdi window into it
QDockWidget *dock = new QDockWidget(myMDIWindow->windowTitle(), this);
dock->setFloating(true);
dock->setFeatures(QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable);
dock->setAllowedAreas(Qt::RightDockWidgetArea);
dock->setWidget(myMDIWindow);      // Wrap mdi window into dock
mainWindow()->addDockWidget(Qt::RightDockWidgetArea, dock);

然后所有其他MDI窗口变为持续活动状态,我无法捕获windowStateChanged信号。将MDI窗口转换为简单的小部件也无济于事。

这可能是什么问题?这是Qt错误吗?

新信息: myMDIWindow与树窗口小部件有信号连接到创建它的mdi窗口(让我们先调用它mdi窗口)。此信号连接到一个插槽,根据用户双击此树窗口小部件创建新的MDI窗口。在这种情况下,所有mdi窗口都变为活动状态如果我通过单击第一个mdi窗口中的按钮创建MDI窗口 - 所有这些都会再次变为正常。创建mdi窗口的代码在两种情况下都是相同的:

  mdiArea->addSubWindow(newMDI);
  newMDI->setMainWindow(this);
  newMDI->show();
  newMDI->raise();
  mdiArea->setActiveSubWindow(newMDI);

“这个”是主窗口。在mdi创建中这可能是Dock小部件有焦点还是smth?

更多信息:如果我使用树小部件取消停靠窗口,那么一切正常。

1 个答案:

答案 0 :(得分:-1)

我们找到了原因:

第一个MDI窗口有QwtPlot我们设置了焦点:

mUi->plot->setFocus();

创作。在我的第一个MDI窗口中,我创建了一个带有树小部件的停靠小部件。当用户双击此树窗口小部件中的项目时,连接到双击信号的第一个mdi窗口插槽会创建新的MDI窗口。第二个MDI还包含QwtPlot,我们在创建时也会关注它。在这种情况下,所有MDI窗口都处于活动状态,我无法捕获windowStateChanged信号。

现在我们评论了所有setFocus()次来电,现在工作正常。这可能是什么问题?