我在Windows 7 Ultimate 32位上使用Qt 4.7。
我的计划的QMainWindow
有一个QDockWidget
。我注意到如果我通过标题栏上的最小化按钮最小化主窗口,则在恢复它之后,停靠停靠窗口小部件。我没有写任何支持这样的功能!
这是如何发生以及如何防止这种情况?
感谢。
答案 0 :(得分:5)
编写自己的应用程序时遇到此错误。我有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被取消选中。
实际上有两种解决方案。首先对我有用的是使用SIGNAL(触发(bool))而不是SIGNAL(切换(bool)):
QObject::connect(ui->dockWidget, SIGNAL(visibilityChanged(bool)),
ui->actionMenu, SLOT(setChecked(bool)));
QObject::connect(ui->actionMenu, SIGNAL(triggered(bool)),
ui->dockWidget, SLOT(setVisible(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);
我肯定知道SIGNAL(切换(bool))导致我的应用程序关闭了QDockWidget。
答案 1 :(得分:3)
我遇到了同样的问题......我设法通过使用名为StoreWindowsLayout和RestoreWindowsLayout的方法摆脱它。
StoreWindowsLayout将保存Method QMainwindow :: saveState()返回的ByteArray的内容。
RestoreWindowsLayout将恢复该bytearray,因此您的Windows布局,qdockwidget可见性状态等等......
我在ApplicationMainFrm :: changeEvent上调用StoreMindowsLayout,在ApplicationMainFrm :: closeEvent(可能是你需要的那个)和ApplicationMainFrm :: hide()中调用。
然后我在ApplicationMainFrm :: showEvent中使用restoreWindowsLayout。
在我的MainForm中使用restoreWindowsLayout:
void ApplicationMainFrm::showEvent(QShowEvent* pEvent)
{
QMainWindow::showEvent(pEvent);
restoreWindowsLayout();
}
希望它有所帮助!