Возможно ли QDockWidget с QStatusBar?

Для QMainWindow Я могу легко установить строку состояния. Когда у меня плавающий QDockWidget, он ведет себя как обычное окно (с точки зрения пользователя).

Что я хочу архивировать, это добавить QStatusBarк плавающему QDockWidget, С сигналом topLevelChanged Я мог скрыть строку состояния, когда окно пристыковано.

Но могу ли я добавить строку состояния в QDockWidget? По крайней мере, в конструкторе форм Qt Creator я не могу (у меня есть контекстное меню "Создать строку состояния" для QMainWindow, но не для QDockWidget).

Есть ли способ сделать это во время выполнения?

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 файл) и новый синтаксис сигналов и слотов, но, конечно, вы можете использовать старый синтаксис, если хотите.

Другие вопросы по тегам