C++ 如果主窗口最小化,QDockWidget将关闭

C++ 如果主窗口最小化,QDockWidget将关闭,c++,qt,C++,Qt,我在Windows7 Ultimate 32位上使用Qt4.7 我的程序的QMainWindow有一个QDockWidget。我注意到,如果我通过标题栏上的最小化按钮最小化主窗口,则在还原它之后,dock小部件将关闭。我没有为这样的功能编写任何支持 这是如何发生的,如何预防 谢谢。我也面临同样的问题。。。我通过使用一个名为StoreWindowsLayout和RestoreWindowsLayout的方法来摆脱它 StoreWindowsLayout将保存方法QMainwindow::saveS

我在Windows7 Ultimate 32位上使用Qt4.7

我的程序的
QMainWindow
有一个
QDockWidget
。我注意到,如果我通过标题栏上的最小化按钮最小化主窗口,则在还原它之后,dock小部件将关闭。我没有为这样的功能编写任何支持

这是如何发生的,如何预防


谢谢。

我也面临同样的问题。。。我通过使用一个名为StoreWindowsLayout和RestoreWindowsLayout的方法来摆脱它

StoreWindowsLayout将保存方法QMainwindow::saveState()返回的ByteArray的内容

RestoreWindowsLayout将恢复bytearray,因此您的windows布局、qdockwidget可见性状态等等

我在ApplicationMainFrm::changeEvent、ApplicationMainFrm::closeEvent(您可能需要这个)和ApplicationMainFrm::hide()中调用StoreWindowsLayout

然后在ApplicationMainFrm::showEvent中使用restoreWindowsLayout

在我的主窗体中使用restoreWindowsLayout的示例:

void ApplicationMainFrm::showEvent(QShowEvent* pEvent)
{
    QMainWindow::showEvent(pEvent);

    restoreWindowsLayout();
}

希望有帮助

我在编写自己的应用程序时遇到了这个错误。我有一个QDockWidget,其中包含应用程序的选项。我使用Qt Creator创建了带有QAction actionMenu的菜单,该菜单是可检查的。然后我像这样连接QDockWidget和QAction:

QObject::connect(ui->dockWidget, SIGNAL(visibilityChanged(bool)),
                 ui->actionMenu, SLOT(setChecked(bool)));
QObject::connect(ui->actionMenu, SIGNAL(toggled(bool)),
                 ui->dockWidget, SLOT(setVisible(bool)));
连接顺序并不重要。然后当我在QDockWidget可见的情况下最小化应用程序时,在我还原它之后,QDockWidget被关闭,actionMenu被取消选中

事实上,有两种解决办法。首先对我有效的是使用信号(触发(bool))而不是信号(切换(bool)):

第二个解决方案使用可从QDockWidget获得的操作:

// Retrieve action from QDockWidget.  
QAction *action = ui->dockWidget->toggleViewAction();  
// Adjust any parameter you want.  
action->setText(QString("&Menu"));  
action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_M));  
action->setStatusTip(QString("Press to show/hide menu widget."));  
action->setChecked(true);  
// Install action in the menu.  
ui->menuOptions->addAction(action);

我确信信号(toggled(bool))是导致我关闭QDockWidget应用程序的原因。

8年过去了,这个解决方案仍然有效,但Qt文档仍然对此一无所知。
// Retrieve action from QDockWidget.  
QAction *action = ui->dockWidget->toggleViewAction();  
// Adjust any parameter you want.  
action->setText(QString("&Menu"));  
action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_M));  
action->setStatusTip(QString("Press to show/hide menu widget."));  
action->setChecked(true);  
// Install action in the menu.  
ui->menuOptions->addAction(action);