【问题标题】: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++11CONFIG += c++11.pro 文件)和new syntax of signals and slots,当然如果你愿意,你可以使用旧语法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多