你能在QDialog中添加一个工具栏吗

Can you add a toolbar to QDialog?

本文关键字:一个 工具栏 QDialog 添加      更新时间:2023-10-16

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

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

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

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

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

如果您不需要QMainWindow工具栏的内置拖放功能,您只需在任何布局中添加一个QToolBar,包括QDialog的layout()。有关详细信息,请参阅下面DigviJay Patil的回答,这在概念上肯定更干净。

否则,请继续阅读。


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

  2. 您不能使QMainWindow成为模态,但可以通过以下方式在QDialog中插入QMainWindow

代码:

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

您可以在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。使用Layout可以调整其位置。请检查此链接http://developer.nokia.com/community/wiki/How_to_use_QToolBar_and_QToolButton_in_Qt