QMainWindow
- 菜单栏 (有且只能有一个)
QMenuBar *bar = menuBar(); setMenuBar(bar); // 创建菜单 QMenu *fileMenu = bar->addMenu("文件"); QMenu *editMenu = bar->addMenu("编辑"); // 创建菜单项 QAction *newAction = fileMenu->addAction("新建"); fileMenu->addSeparator(); // 添加分割线 QAction *openAction = fileMenu->addAction("打开");
- 工具栏 (可以有多个)
QToolBar *toolBar = new QToolBar(); addToolBar(Qt::LeftToolBarArea,toolBar); // 设置只允许左右停靠 toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea); // 设置浮动 toolBar->setFloatable(false); // 设置移动(总开关) toolBar->setMovable(false); // 工具栏添加小部件 toolBar->addAction(newAction); toolBar->addSeparator(); // 添加分割线 toolBar->addAction(openAction);
- 状态栏 (只能有一个)
QStatusBar *staBar = statusBar(); setStatusBar(staBar); QLabel *label1 = new QLabel("左侧提示信息",this); staBar->addWidget(label1); QLabel *label2 = new QLabel("右侧提示信息",this); staBar->addPermanentWidget(label2);
- 铆接部件(即浮动窗口) (可以有多个)
QDockWidget *dock = new QDockWidget("浮动窗口",this); addDockWidget(Qt::TopDockWidgetArea,dock); // 只允许左右停靠 dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
- 核心部件 (只能有一个)
QTextEdit *edit = new QTextEdit(this); setCentralWidget(edit);
tips: 1. 添加这些控件的方法使用set为前缀的,基本上都只能创建一个,而使用add为前缀的基本上都可以创建多个。2. new出来的空间要记得添加this参数,将创建在堆区的控件绑定到QT对象树上,便于堆区内存释放。
QT添加资源文件
如需要在工具栏各个属性旁添加图标时,需要添加一些资源文件。
资源文件添加步骤:
-
首先将资源文件夹复制到项目目录下。
-
在QTCreater中右击项目->添加新文件->Qt->Qt Rescourse File
-
给添加的资源文件起名 xxx,之后会在项目下生成一个xxx.qrc文件
-
打开xxx.qrc文件,添加前缀,添加资源文件
资源文件使用:
: + 前缀名 + 文件名
// 给文件添加小图标
// 资源文件添加 语法: ": + 前缀名 + 文件名称"
ui->actionnew->setIcon(QIcon(":/Image/Luffy.png"));
ui->actionopen->setIcon(QIcon(":/Image/LuffyQ.png"));
QT对话框(QTDialog)
分类:模态对话框 非模态对话框
模态对话框: 不可以对其它窗口进行操作
非模态对话框: 可以对其它窗口进行操作
通过信号和槽来实现当点击工具栏中的新建,创建对话框
// 点击新建,创建对话框
connect(ui->actionNew,&QAction::triggered,this,[=](){
// 模态对话框创建
QDialog dlg(this);
dlg.resize(220,90);
dlg.exec(); // 设置阻塞,让对话框等待用户操作
});
// 点击新建,创建对话框
connect(ui->actionNew,&QAction::triggered,this,[=](){
// 非模态对话框创建
QDialog *dlg2 = new QDialog(this);
dlg2->resize(220,90);
dlg2->show();
// 设置 55号属性
dlg2->setAttribute(Qt::WA_DeleteOnClose);
});
tips: 非模态对话框的显示使用的是show()方法,当非模态对话框使用非new创建在栈区,由于这里创建使用的是lambda表达式,离开作用域对话框会很快消失,因此使用new创建在堆区;但是对话框的内存需要等待MainWindow关闭后才能得到释放,如果在多次打开关闭对话框后可能因内存未及时释放产生内存泄露,因此设置55号属性,及时释放内存。