2011-01-08 13 views
4

Windows 7 Ultimate 32ビットでQt 4.7を使用しています。メインウィンドウが最小化されているとQDockWidgetが閉じます

私のプログラムのQMainWindowにはQDockWidgetがあります。タイトルバーの最小化ボタンでメインウィンドウを最小化すると、復元後にドックウィジェットが閉じられることに気付きました。私はこのような機能のサポートを書いていませんでした!

これはどうやってこれを防止するのですか?

ありがとうございました。

答えて

3

私は同じ問題に直面しました...私はStoreWindowsLayoutとRestoreWindowsLayoutというメソッドを使用してそれを取り除くことができました。

StoreWindowsLayoutは、メソッドQMainwindow :: saveState()によって返されたByteArrayの内容を保存します。

RestoreWindowsLayoutは、私がApplicationMainFrmにStoreWindowsLayoutを呼び出すことのByteArrayを復元するため、あなたの窓のレイアウト、qdockwidgetの可視性の状態のように...

ます:: ApplicationMainFrmにChangeEventのを、:: closeEventは(それはおそらく、この1あなたです)とApplicationMainFrm :: hide()の中にあります。

次に、ApplicationMainFrm :: showEventでrestoreWindowsLayoutを使用します。

私のMainFormでrestoreWindowsLayoutの使用のExemple:

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

    restoreWindowsLayout(); 
} 

はそれが役に立てば幸い!

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を復元した後、QDockWidgetが閉じられ、actionMenuがチェックされなくなりました。

実際には2つの解決策があります。私の作品最初はSIGNAL(トリガー(ブール値))の代わりに、SIGNAL(切り替え(ブール値))を使用することです:

// 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); 

QObject::connect(ui->dockWidget, SIGNAL(visibilityChanged(bool)), 
       ui->actionMenu, SLOT(setChecked(bool))); 
QObject::connect(ui->actionMenu, SIGNAL(triggered(bool)), 
       ui->dockWidget, SLOT(setVisible(bool))); 

第2の解決策は、あなたがQDockWidgetから入手できるアクションを使用しています

QDockWidgetのアプリケーション終了時にSIGNAL(トグル(ブール))が原因であることがわかりました。