你能为QDialog添加一个工具栏吗?

Joh*_*ohn 12 c++ qt modal-dialog qdialog qmainwindow

我正在开发一个项目,需要调用带有工具栏的模态窗口,以便在加载之前对某些数据进行一些处理.我需要工具栏的原因是用户有几个可以组合的不同选项.

这里显而易见的选择是模态对话框(我现在正在使用它).问题是我想要一个工具栏.这是一个两部分问题:

  1. 是否可以添加工具栏QDialog?(也可以在Qt Designer中执行此操作吗?)
  2. 如果1.不可能,我该如何制作QMainWindow模态?

Fre*_*red 26

您只需使用QDialog上安装的布局管理器的setMenuBar函数:

myDialog->layout()->setMenuBar(myMenuBar);
Run Code Online (Sandbox Code Playgroud)


Bor*_*ein 6

如果您不需要QMainWindow工具栏的内置拖放功能,您只需将QToolBar添加到任何布局,包括QDialog的布局().有关详细信息,请参阅下面的DigviJay Patil的答案,这在概念上绝对更清晰.

否则,请继续阅读.


  1. 它不是直接可以将添加QToolBarQDialog在的QMainWindow :: addToolBar()的意义,因为QDialog只有继承QWidget,而不是QMainWindow,正如你指出(因此没有方法addToolBar())

  2. 你不能让一个QMainWindow模式,但你可以插入一个QMainWindowQDialog这种方式:

码:

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);
}
Run Code Online (Sandbox Code Playgroud)

实际上,a QMainWindow不一定必须是顶级窗口小部件,你甚至可以插入几个QMainWindows作为单个窗口小部件的子窗口(虽然可能不是最明智的选择,因为用户可能会与单独的组件混淆菜单栏,工具栏,停靠小部件等).

  • @pablo_worker我认为你不对.`layout-> addWidget()`不会立即设置所有权,但`setLayout`应该.见http://doc.qt.io/qt-4.8/layout.html.`布局将自动重新显示窗口小部件(使用QWidget :: setParent()),以便它们是安装布局的窗口小部件的子窗口. (2认同)
  • 我查看了Qt 4.8源代码,[setLayout()](https://github.com/qt/qt/blob/4.8/src/gui/kernel/qwidget.cpp#L9809)确实是育儿工作.相关的调用是`l-> d_func() - > reparentChildWidgets(this);`,其中定义函数reparentChildWidgets [here](https://github.com/qt/qt/blob/0a2f2382541424726168804be2c90b91381608c6/src/gui/核心/ qlayout.cpp 1957#). (2认同)

Dig*_*til 5

您可以在QDialog中添加QToolBar.但作为一个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
}
Run Code Online (Sandbox Code Playgroud)

由于QToolBar是QWidget的子代,我们可以将其添加为Widget.使用布局,您可以调整其位置.请查看此链接 http://developer.nokia.com/community/wiki/How_to_use_QToolBar_and_QToolButton_in_Qt