对于QMainWindow
,我可以轻松设置状态栏。当我有一个浮动的QDockWidget
时,它的行为就像一个普通的窗口(从用户的角度来看)。
我要归档的是向浮动QStatusBar
添加QDockWidget
。使用信号topLevelChanged
,我可以在窗口停靠时隐藏状态栏。
但是我可以向QDockWidget
添加状态栏吗?至少在Qt Creator表单构建器中我不能(我有一个上下文菜单"创建状态栏"用于QMainWindow
,但不能用于QDockWidget
)。
任何方式都可以运行它吗?
答案 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);
结果(有"准备就绪"但由于我的窗口大小,你无法看到它):
你问题的另一部分的例子很少:
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++11
到.pro
文件)和new syntax of signals and slots,但当然如果需要,您可以使用旧语法。