Можете ли вы добавить панель инструментов в QDialog?

Я работаю над проектом, которому нужно вызвать модальное окно с панелью инструментов, чтобы выполнить некоторую работу с некоторыми данными перед их загрузкой. Причина, по которой мне нужна панель инструментов, заключается в том, что у пользователя есть несколько возможных вариантов, которые можно комбинировать.

Очевидным выбором здесь является модальное диалоговое окно (которое я сейчас работаю). Проблема в том, что я хочу панель инструментов. Это вопрос из двух частей:

  1. Можно ли добавить панель инструментов в QDialog? (также возможно ли это сделать в Qt Designer?)
  2. Если 1. не возможно, как я могу сделать QMainWindow модальный?

12

Решение

Если вам не нужна встроенная функция перетаскивания панелей инструментов QMainWindow, вы можете просто добавить QToolBar в любой макет, включая макет QDialog (). Увидеть DigviJay Патил ответ ниже для деталей, которые определенно чище концептуально.

В противном случае, пожалуйста, продолжайте читать.


  1. Это не непосредственно можно добавить QToolBar к QDialog в смысле QMainWindow :: addToolBar (), потому что QDialog наследует только QWidget и не QMainWindow, как вы заметили (следовательно, нет метода addToolBar())

  2. Вы не можете сделать 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как дочерние элементы одного виджета (хотя, возможно, это не самый мудрый выбор, так как пользователь, вероятно, будет смущен отдельными наборами строк меню, панелей инструментов, виджетов на панели и т. д.).

5

Другие решения

Вы можете просто использовать функцию setMenuBar менеджера макета, который установлен на вашем QDialog:

myDialog->layout()->setMenuBar(myMenuBar);
25

Вы можете добавить 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

6
По вопросам рекламы [email protected]