【问题标题】:QDockWidget with QStatusBar possible?QDockWidget 与 QStatusBar 可能吗?
【发布时间】:2014-11-03 16:06:25
【问题描述】:
对于QMainWindow,我可以轻松设置状态栏。当我有一个浮动的QDockWidget 时,它的行为就像一个普通的窗口(从用户的角度来看)。
我要存档的是将QStatusBar添加到浮动QDockWidget。使用信号topLevelChanged 我可以在窗口停靠时隐藏状态栏。
但是我可以向QDockWidget 添加状态栏吗?至少在 Qt Creator 表单构建器中我不能(我有一个上下文菜单“创建状态栏”用于QMainWindow,但没有用于QDockWidget)。
有什么办法让它运行时?
【问题讨论】:
标签:
qt
qt5
qdockwidget
qt5.3
qstatusbar
【解决方案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++11 到.pro 文件)和new syntax of signals and slots,当然如果你愿意,你可以使用旧语法。