我在Windows 7 Ultimate 32位上使用Qt 4.7。如果主窗口最小化,QDockWidget关闭
我的程序的QMainWindow
有QDockWidget
。我注意到,如果我通过标题栏上的最小化按钮最小化主窗口,在恢复它之后关闭了Dock小部件。我没有写任何支持这样的功能!
这是怎么发生的以及如何防止这种情况?
谢谢。
我在Windows 7 Ultimate 32位上使用Qt 4.7。如果主窗口最小化,QDockWidget关闭
我的程序的QMainWindow
有QDockWidget
。我注意到,如果我通过标题栏上的最小化按钮最小化主窗口,在恢复它之后关闭了Dock小部件。我没有写任何支持这样的功能!
这是怎么发生的以及如何防止这种情况?
谢谢。
我面临同样的问题......我设法摆脱它通过使用一种名为StoreWindowsLayout和RestoreWindowsLayout的方法。
StoreWindowsLayout将保存由方法QMainwindow :: saveState()返回的ByteArray的内容。
RestoreWindowsLayout将恢复字节组,因此,你的窗户布局,qdockwidget可见性状态等等......
我呼吁ApplicationMainFrm :: changeEvent中StoreWindowsLayout,在ApplicationMainFrm ::的closeEvent(很可能这一个你需要)和ApplicationMainFrm :: hide()。
然后我在ApplicationMainFrm :: showEvent中使用restoreWindowLayout。使用restoreWindowsLayout的
为例在我的MainForm:
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未被选中。
实际上有两种解决方案。首先这对我的作品是用信号(触发(布尔)),而不是信号(切换(布尔)):
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);
我知道确切的信号(切换(布尔))导致我的应用程序关闭QDockWidget。