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

时间:2013-08-26 02:30:19

标签: c++ qt modal-dialog qmainwindow qdialog

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

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

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

3 个答案:

答案 0 :(得分:25)

您可以简单地使用QDialog上安装的布局管理器的setMenuBar函数:

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

答案 1 :(得分:6)

您可以在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
}

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

答案 2 :(得分:5)

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

否则,请继续阅读。


  1. 在{QMainWindow :: addToolBar()意义上, 直接不能将QToolBar添加到QDialog,因为QDialog继承了只有QWidget而不是QMainWindow,正如您所指出的那样(因此没有方法addToolBar()

  2. 您无法制作QMainWindow模式,但可以QMainWindow这样插入QDialog

  3. 代码:

    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作为单个窗口小部件的子窗口(尽管可能不是最明智的选择) ,因为用户可能会与单独的菜单栏,工具栏,停靠小部件等集合混淆。