首页 > 解决方案 > QMdiSubWindows 的问题:窗口标志在最大化后消失,并且子窗口可能会因移动而丢失

问题描述

我的 QMdiSubWindows 有两个问题。目前可以将子窗口移动到主窗口的菜单/工具栏下方,因为我无法再到达子窗口的窗口标志,所以它会丢失。另一个问题是窗口标志在我最大化子窗口后消失了。

在此处输入图像描述

目前我的代码如下所示:

//mainwindow.h
class MainWindow : public QMainWindow
{
   Q_OBJECT

   public:
       explicit MainWindow(QWidget * parent = nullptr);

   protected:
       void
       closeEvent(QCloseEvent * event);

   private slots:
       void
       newSignalTable();

       private:
       void
       createMenuBar();

       QMdiArea * m_mdiArea;
};



//mainwindow.cpp
MainWindow::MainWindow(QWidget * parent) : QMainWindow(parent), m_mdiArea(new QMdiArea)
{
    m_mdiArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    m_mdiArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
    setCentralWidget(m_mdiArea);

    createMenuBar();

    setWindowTitle(tr("%1 (Multiple Models)[    *]").arg(QApplication::applicationName()));
}


void
MainWindow::newSignalTable()
{
    QMdiSubWindow * tableSubWindow = new QMdiSubWindow;
    auto *          tableWidget    = new TableWidget(m_driveComLibrary);
    QWidget *       newWidget      = tableWidget->createTable();
    tableSubWindow->setWidget(newWidget);
    tableSubWindow->setAttribute(Qt::WA_DeleteOnClose);
    tableSubWindow->setMinimumSize(QSize(320, 300));

    tableSubWindow->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
    m_mdiArea->addSubWindow(tableSubWindow);
    tableSubWindow->show();
}

void
MainWindow::createMenuBar()
{
    QAction * newTableAction = new QAction(tr("&New Signal Table"), this);
    newTableAction->setShortcuts(QKeySequence::New);
    newTableAction->setStatusTip("Create a new signal table");
    connect(newTableAction, &QAction::triggered, this, &MainWindow::newSignalTable);

    auto fileMenu = menuBar()->addMenu(tr("&File"));
    fileMenu->addAction(newTableAction);
    fileMenu->addSeparator();
}

有谁知道如何限制子窗口的区域以及如何在最大化子窗口后获得窗口标志的正确表示?

标签: c++qtqmdiarea

解决方案


推荐阅读