先讲一下QMainWindow的布局,MainWindow的结构分为五个部分:菜单栏(Menu Bar)、工具栏(Toolbars)、停靠窗口(Dock Widgets)、状态栏(Status Bar)和中央窗口(Central Widget)。可以用下面的图形表示之。
直接从代码里面说吧,都基本有注释,只是简单做一介绍,
#include "mainwindow.h"
#include <QPushButton> //按钮
#include <QMenuBar> //菜单栏
#include <QMenu> //菜单
#include <QAction> //菜单项
#include <QToolBar> //工具栏
#include <QStatusBar> //状态栏
#include <QLabel> //标签
#include <QDockWidget> //铆接部件
#include <QTextEdit> //编辑框
#include <QPixmap> //图片
#include <QFileDialog> //文件对话框
#include <QDialog> //对话框
#include <QMessageBox> //消息对话框
#include <QString>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setWindowTitle("QMainWindow");
this->resize(600,400);
//取出菜单栏
QMenuBar *menuBar1=this->menuBar();
//向菜单栏上去添加菜单
QMenu *filemenu= menuBar1->addMenu("文件");
QMenu *fileedit= menuBar1->addMenu("编辑");
//向菜单栏添加菜单项
QAction *filemenu_open=filemenu->addAction("打开");
filemenu->addSeparator();//添加分割线
QAction *filemenu_save=filemenu->addAction("保存");
filemenu->addSeparator();//添加分割线
QAction *filemenu_delete=filemenu->addAction("删除");
//获取工具栏
QToolBar *toolbar=this->addToolBar("");
//工具栏中添加工具(添加菜单项)
toolbar->addAction(filemenu_open);
toolbar->addAction(filemenu_save);
//取出状态栏
QStatusBar *status=this->statusBar();
status->addWidget(new QLabel("状态"));
//创建铆接部件
QDockWidget *dockwidget=new QDockWidget ("这是一个铆接部件",this);
//添加活动窗口到父窗口
this->addDockWidget(Qt::TopDockWidgetArea,dockwidget);
//创建编辑框
QTextEdit *edit=new QTextEdit("文本编辑器",this);
//设置编辑框为中心部件
this->setCentralWidget(edit);
//资源文件的路径:/new/prefix1/images/lo.bmp
QPixmap pic; //新建图片对象
pic.load(":/new/prefix1/images/lo.bmp");//给图片对象加载图像
//给菜单项设置为图片
filemenu_open->setIcon(QIcon(pic));
//标准对话框->文件选择对话框
QPushButton *button1=new QPushButton("选择文件",this);
button1->resize(100,50);
button1->move(250,100);
connect(button1,&QPushButton::clicked,this,[](){
//单个文件
QString str=QFileDialog::getOpenFileName();
//多个文件
//QStringList strs=QFileDialog::getOpenFileNames();
qDebug()<<str;
});
//模态对话框:对话框打开的时候不能点击后面主框
QPushButton *button2=new QPushButton("模态对话框按钮",this);
button2->resize(100,50);
button2->move(250,180);
connect(button2,&QPushButton::clicked,this,[](){
//定义一个对话框
QDialog dialog;
dialog.setWindowTitle(tr("hello,dialog!模态对话框"));//设置对话框标题
dialog.exec();//阻塞对话框
});
//非模态对话框:对话框打开的时候可以点击后面主框
QPushButton *button3=new QPushButton("非模态对话框按钮",this);
button3->resize(100,50);
button3->move(250,260);
connect(button3,&QPushButton::clicked,this,[](){
//定义一个对话框
QDialog *dialog = new QDialog;
dialog->setWindowTitle(tr("hello,dialog!非模态对话框"));//设置对话框标题
dialog->setAttribute(Qt::WA_DeleteOnClose);//关闭的时候自动释放
dialog->show();//显示对话框
});
//消息对话框 关于类型
QPushButton *button4=new QPushButton("关于",this);
button4->resize(100,50);
button4->move(100,100);
connect(button4,&QPushButton::clicked,this,[=](){
QMessageBox::about(this,"标题","内容");
});
//消息对话框 询问类型
QPushButton *button5=new QPushButton("询问",this);
button5->resize(100,50);
button5->move(100,180);
connect(button5,&QPushButton::clicked,this,[=](){
int ret = QMessageBox::question(this,"标题","你需要吗?",QMessageBox::Save|QMessageBox::Open);
if (ret==QMessageBox::Open){
qDebug()<<"open!!!";
}
else{
qDebug()<<"save!!!";
}
});
}
MainWindow::~MainWindow()
{
}
(1)整体布局
(2)菜单栏显示菜单
(3)工具栏
(4)状态栏
(5) 消息对话框
关于对话框
选择对话框
(6)铆接部件,可拖动出来显示为另一个窗口或可改变其位置
(7)中心部件
(8)对话框
标准对话框(文件选择对话框),是模态的对话框
模态对话框:点击按钮之后产生对话框之后不能再点击主框中的按钮及 其他的
模态对话框:点击按钮之后产生对话框之后可以再点击主框中的按钮及 其他的