1

对于一个QMainWindow我可以很容易地设置一个状态栏。当我有一个 floatingQDockWidget时,它的行为就像一个普通窗口(从用户的角度来看)。

我要归档的是QStatusBar在浮动中添加一个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);

结果(也有“就绪”,但由于我的窗口大小,您看不到它):

在此处输入图像描述

你问题的另一部分的小例子:

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文件)使用了信号和槽的新语法,但当然,如果你愿意,你可以使用旧语法。

于 2014-11-03T16:09:22.493 回答