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

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

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

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

3 ответов


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

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


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

  2. вы не можете сделать QMainWindow modal, но вы можете вставить 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);
}

действительно, a QMainWindow не обязательно должен быть виджет верхнего уровня, и вы даже можете вставить несколько QMainWindows, так как дети одного виджета (может быть, не самый мудрый выбор, как пользователь наверное, путать отдельные наборы меню, панелей, виджетов и т. д.).


вы можете просто использовать функцию 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, мы можем добавить его в качестве виджета. Используя Layout вы можете настроить его положение. Пожалуйста, проверьте эту ссылку http://developer.nokia.com/community/wiki/How_to_use_QToolBar_and_QToolButton_in_Qt