Я работаю над проектом, которому нужно вызвать модальное окно с панелью инструментов, чтобы выполнить некоторую работу с некоторыми данными перед их загрузкой. Причина, по которой мне нужна панель инструментов, заключается в том, что у пользователя есть несколько возможных вариантов, которые можно комбинировать.
Очевидным выбором здесь является модальное диалоговое окно (которое я сейчас работаю). Проблема в том, что я хочу панель инструментов. Это вопрос из двух частей:
QDialog
? (также возможно ли это сделать в Qt Designer?)QMainWindow
модальный?Если вам не нужна встроенная функция перетаскивания панелей инструментов QMainWindow, вы можете просто добавить QToolBar в любой макет, включая макет QDialog (). Увидеть DigviJay Патил ответ ниже для деталей, которые определенно чище концептуально.
В противном случае, пожалуйста, продолжайте читать.
Это не непосредственно можно добавить 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
как дочерние элементы одного виджета (хотя, возможно, это не самый мудрый выбор, так как пользователь, вероятно, будет смущен отдельными наборами строк меню, панелей инструментов, виджетов на панели и т. д.).
Вы можете просто использовать функцию setMenuBar менеджера макета, который установлен на вашем QDialog:
myDialog->layout()->setMenuBar(myMenuBar);
Вы можете добавить 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, мы можем добавить его как Widget. Используя макет, вы можете настроить его положение. Пожалуйста, проверьте эту ссылку http://developer.nokia.com/community/wiki/How_to_use_QToolBar_and_QToolButton_in_Qt