【问题标题】:All MDI windows are active所有 MDI 窗口都处于活动状态
【发布时间】:2016-03-31 11:47:20
【问题描述】:

我遇到了一个奇怪的问题。我在 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);

“this”是主窗口。这可能是停靠小部件在创建 mdi 时具有这样的焦点或 smth 吗?

更多信息:如果我用树形小部件取消停靠窗口,一切都会再次正常工作。

【问题讨论】:

    标签: qt mdi docking qt5.5


    【解决方案1】:

    我们找到了原因:

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

    mUi->plot->setFocus();

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-08
      • 2017-12-22
      • 2017-01-10
      • 1970-01-01
      相关资源
      最近更新 更多