我正在开发一个项目,需要调用带有工具栏的模态窗口,以便在加载之前对某些数据进行一些处理。我需要工具栏的原因是用户有几个可以组合的不同选项。
这里显而易见的选择是模态对话框(我现在正在使用它)。问题是我想要一个工具栏。这是一个两部分问题:
QDialog
添加工具栏? (也可以在Qt Designer中执行此操作吗?)QMainWindow
模态?答案 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,这在概念上肯定更清晰。
否则,请继续阅读。
在{QMainWindow :: addToolBar()意义上, 直接不能将QToolBar
添加到QDialog
,因为QDialog
继承了只有QWidget
而不是QMainWindow
,正如您所指出的那样(因此没有方法addToolBar()
)
您无法制作QMainWindow
模式,但可以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);
}
实际上,QMainWindow
并不一定是顶级窗口小部件,您甚至可以插入多个QMainWindow
作为单个窗口小部件的子窗口(尽管可能不是最明智的选择) ,因为用户可能会与单独的菜单栏,工具栏,停靠小部件等集合混淆。