1

QMainWindowステータスバーを簡単に設定できます。フローティング がある場合QDockWidget、(ユーザーの観点から) 通常のウィンドウのように動作します。

アーカイブしたいのはQStatusBar、フローティングに a を追加することQDockWidgetです。信号を使用するtopLevelChangedと、ウィンドウがドッキングされているときにステータスバーを非表示にできます。

しかし、ステータスバーをに追加できますQDockWidgetか? 少なくとも Qt Creator フォーム ビルダーではできませんQMainWindow( QDockWidget.

それをランタイムにする方法はありますか?

4

1 に答える 1

1

これを行うだけです:

QStatusBar *bar = new QStatusBar;//in constructor for example
bar->showMessage(tr("Ready"));
ui->dockWidget->setWidget(bar);

この場合QStatusBarはウィジェットになりますが、QWidget をコンテナーとして使用して、QStatusBar常に下になるレイアウトを追加することもできます。

QProgressBar:

QStatusBar *bar = new QStatusBar;
QProgressBar *pr = new QProgressBar;
bar->showMessage(tr("Ready"));
pr->setValue(50);
bar->addPermanentWidget(pr);
ui->dockWidget->setWidget(bar);

結果(「Ready」もありますが、ウィンドウのサイズのために表示されません):

ここに画像の説明を入力

あなたの質問の別の部分の小さな例:

QStatusBar *bar = new QStatusBar;
QProgressBar *pr = new QProgressBar;
bar->showMessage(tr("Ready"));
pr->setValue(50);
bar->addPermanentWidget(pr);
ui->dockWidget->setWidget(bar);

connect( ui->dockWidget,&QDockWidget::topLevelChanged,[=](bool visible)
{
    if(visible)
        bar->hide();
    else
        bar->show();
 });

ここC++11( CONFIG += c++11to .profile) とシグナルとスロットの新しい構文を使用しましたが、必要に応じて古い構文を使用することもできます。

于 2014-11-03T16:09:22.493 に答える