在编写自己的应用程序时,我遇到了这个错误。我有一个带有选项的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(triggered(bool))而不是SIGNAL(toggled(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获取它:
QAction *action = ui->dockWidget->toggleViewAction();
action->setText(QString("&Menu"));
action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_M));
action->setStatusTip(QString("Press to show/hide menu widget."));
action->setChecked(true);
ui->menuOptions->addAction(action);
我确定,在我的应用程序中,SIGNAL(toggled(bool))导致了QDockWidget的关闭。