有QStatusBar的QDockWidget可能吗?

时间:2014-11-03 16:06:26

标签: qt qt5 qdockwidget qt5.3 qstatusbar

对于QMainWindow,我可以轻松设置状态栏。当我有一个浮动的QDockWidget时,它的行为就像一个普通的窗口(从用户的角度来看)。

我要归档的是向浮动QStatusBar添加QDockWidget。使用信号topLevelChanged,我可以在窗口停靠时隐藏状态栏。

但是我可以向QDockWidget添加状态栏吗?至少在Qt Creator表单构建器中我不能(我有一个上下文菜单"创建状态栏"用于QMainWindow,但不能用于QDockWidget)。

任何方式都可以运行它吗?

1 个答案:

答案 0 :(得分: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);

结果(有"准备就绪"但由于我的窗口大小,你无法看到它):

enter image description here

你问题的另一部分的例子很少:

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++11CONFIG += c++11.pro文件)和new syntax of signals and slots,但当然如果需要,您可以使用旧语法。