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