Вы можете добавить панель инструментов в QDialog?
Я работаю над проектом, которому нужно вызвать модальное окно с панелью инструментов, чтобы выполнить некоторую работу над некоторыми данными перед загрузкой. Причина, по которой мне нужна панель инструментов, состоит в том, что у пользователя есть несколько различных возможных вариантов, которые можно комбинировать.
Очевидным выбором здесь является модальный диалог (который я сейчас работаю). Проблема в том, что я хочу панель инструментов. Это вопрос двух частей:
- Можно ли добавить панель инструментов в
QDialog
? (также возможно сделать это в Qt Designer?) - Если 1. невозможно, как я могу сделать модальный
QMainWindow
?
Ответы
Ответ 1
Если вам не нужна встроенная функция перетаскивания панелей инструментов QMainWindow, вы можете просто добавить QToolBar в любой макет, включая QDialog layout(). См. Ниже приведенный ниже ответ DigviJay Patil, который определенно более понятен концептуально.
В противном случае, пожалуйста, прочитайте.
-
Невозможно добавить QToolBar
в QDialog
в смысле QMainWindow :: addToolBar(), поскольку QDialog
наследует только QWidget
а не QMainWindow
, как вы отметили (следовательно, не имеет метода addToolBar()
),
-
Вы не можете использовать QMainWindow
, но вы можете вставить QMainWindow
в QDialog
следующим образом:
Код:
MyDialog::MyDialog() :
QDialog()
{
QMainWindow * mainWindow = new QMainWindow(); // or your own class
// inheriting QMainWindow
QToolBar * myToolBar = new QToolBar();
mainWindow->addToolBar(myToolBar);
QHBoxLayout * layout = new QHBoxLayout();
layout->addWidget(mainWindow);
setLayout(layout);
}
Действительно, QMainWindow
необязательно должен быть виджем верхнего уровня, и вы даже можете вставить несколько QMainWindow
виде дочерних элементов одного виджета (возможно, это не самый мудрый выбор, поскольку пользователь, вероятно, будет путать с отдельными наборами меню, панели инструментов, виджеты док-станции и т.д.).
Ответ 2
Вы можете просто использовать функцию setMenuBar менеджера макета, установленную в QDialog:
myDialog->layout()->setMenuBar(myMenuBar);
Ответ 3
Вы можете добавить QToolBar в QDialog. Но как QWidget. Пожалуйста, посмотрите
MyDialog::MyDialog(QWidget *parent) : QDialog(parent)
{
QVBoxLayout *mainLayout = new QVBoxLayout(this);
QToolBar *toolBar = new QToolBar();
mainLayout->addWidget(toolBar);
QAction *action1 = new QAction("Add", toolBar);
QAction *action1 = new QAction("Del", toolBar);
//Add What you want
}
Поскольку QToolBar является дочерним элементом QWidget, мы можем добавить его как Виджет. Используя Layout, вы можете отрегулировать свое положение. Проверьте эту ссылку http://developer.nokia.com/community/wiki/How_to_use_QToolBar_and_QToolButton_in_Qt