在 QT C++ 中,QMdiSubWindow 会打开多个窗口

in QT C++, QMdiSubWindow opens multiple windows

本文关键字:窗口 QMdiSubWindow QT C++      更新时间:2023-10-16

好吧,伙计们,我很抱歉,但我一直在查看有关QT的一些文档,但我仍然无法使其工作,我想要的是,好吧,我有Mdi区域,它有一个按钮来添加子窗口,它是一个电话簿,当我单击按钮添加一个子窗口时,它确实可以,但是如果我单击它5次,它将打开同一窗口的5个和我想让它只打开一个,无论你点击多少。

这是一张图片,当我单击红色圈出的按钮时,它将打开中间的窗口。我尝试将其设置为活动窗口并使用更多内容,但尚未奏效,非常感谢任何帮助。

链接到Imgur上的图片

这很简单。如果已创建另一个窗口,请不要创建该窗口。

在头文件中:

QMdiSubWindow* subwindow;

在构造函数中:

subwindow = 0;

在按钮的点击插槽中:

if (!subwindow) {
  subwindow = ui->mdi_area->addSubWindow(widget);
}
subwindow->show();
subwindow->setFocus();

默认情况下,子窗口在关闭时不会被删除,因此您可以再次使用相同的对象。

您可以在

打开之前检查subWindowList:

  bool is_open = false;
  foreach(QMdiSubWindow *subw, ui->mdi_area->subWindowList())
    if (qobject_cast<YouWindowClass>(subw) != nullptr) is_open = true;