我正在开发一个项目,该项目需要调用带有工具栏的模式窗口,以便在加载之前对某些数据进行一些处理。我需要工具栏的原因是用户有几个不同的可能选项可以组合。
这里明显的选择是模态对话框(我现在正在工作)。问题是我想要一个工具栏。这是一个两部分的问题:
- 是否可以将工具栏添加到
QDialog
? (也可以在 Qt Designer 中执行此操作吗?) - 如果 1. 不可能,我该如何制作
QMainWindow
模态?
我正在开发一个项目,该项目需要调用带有工具栏的模式窗口,以便在加载之前对某些数据进行一些处理。我需要工具栏的原因是用户有几个不同的可能选项可以组合。
这里明显的选择是模态对话框(我现在正在工作)。问题是我想要一个工具栏。这是一个两部分的问题:
QDialog
? (也可以在 Qt Designer 中执行此操作吗?)QMainWindow
模态?您可以简单地使用安装在 QDialog 上的布局管理器的 setMenuBar 函数:
myDialog->layout()->setMenuBar(myMenuBar);
您可以在 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
如果您不需要 QMainWindow 工具栏的内置拖放功能,您可以简单地将 QToolBar 添加到任何布局,包括 QDialog 的 layout()。有关详细信息,请参阅下面的DigviJay Patil 的答案,这在概念上绝对更干净。
否则,请继续阅读。
在 QMainWindow::addToolBar() 意义上,不能直接将 a 添加QToolBar
到 a ,因为只继承而不是,正如您所指出的(因此没有方法)QDialog
QDialog
QWidget
QMainWindow
addToolBar()
您不能制作QMainWindow
模态,但可以通过以下方式插入QMainWindow
a 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);
}
实际上, aQMainWindow
不一定必须是顶级小部件,您甚至可以插入多个QMainWindow
s 作为单个小部件的子级(尽管可能不是最明智的选择,因为用户可能会对单独的菜单栏、工具栏、停靠小部件等)。