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

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

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

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

Ответ 1

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

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


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

Ответ 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