菜单栏+工具栏
新建工程基类是QMainWindow
1、
2、
3、
点.pro文件,添加配置
因为之后用到lambda;
在.pro文件添加配置c++11
CONFIG +=c++11
#不能加分号
添加头文件
#include <QMenuBar>//菜单栏的头文件
主窗口代码mainwindow.cpp文件
#include "mainwindow.h"
#include <QMenuBar>//菜单栏的头文件
#include <QMenu>//菜单的头文件
#include <QAction>//动作头函数
#include <QDebug>//打印头文件
#include<QToolBar>//工具头文件,快捷图标工具
#include<QPushButton>//添加按钮
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//菜单栏的文件菜单
QMenuBar *mBar=menuBar();//生成一个菜单栏
QMenu *pFile=mBar->addMenu("文件");//给菜单栏添加一个菜单名设置为文件;pFile就是指向这个文件菜单
QAction *pnew= pFile->addAction("新建");//添加菜单项,pnew指向,新建菜单项 的动作返回值
connect(pnew,&QAction::triggered,
[=]()
{
qDebug()<<"新建被按下";
}
);
pFile->addSeparator();//添加分割线
QAction *popen =pFile->addAction("打开");//再添加一个菜单项,pFile是指向菜单名为文件
//工具栏,菜单项的快捷方式;菜单栏下面的图标快捷工具
QToolBar *toolBar =addToolBar("toolBar");//添加工具栏,菜单栏下面的可视化图标工具快捷键 toolBar指向菜单栏
toolBar->addAction( pnew );//工具栏添加快捷键,添加了一个指向新建菜单项
QPushButton *b=new QPushButton(this);//在工具栏添加一个按键
b->setText("按键1");
//添加小控件
toolBar->addWidget(b);//添加控件为b按钮的控件
connect(b,&QPushButton::clicked,
[=]() //()里面可以添加信号的参数列表 clicked 发了个bool 型 那么
{
b->setText("123");//按一次就变名字
}
);
resize(500,500);
}
MainWindow::~MainWindow()
{
}
结果示图
核心控件和浮动窗口和模态和非模态对话框代码
#include "mainwindow.h"
#include <QMenuBar>//菜单栏的头文件
#include <QMenu>//菜单的头文件
#include <QAction>//动作头函数
#include <QDebug>//打印头文件
#include<QToolBar>//工具头文件,快捷图标工具
#include<QPushButton>//添加按钮
#include<QStatusBar>//状态栏的头文件
#include<QLabel>//标签头文件
#include<QTextEdit>//文本编辑器
#include<QDockWidget>//浮动窗口头文件
#include<QDialog>//对话窗口
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//菜单栏的文件菜单
QMenuBar *mBar=menuBar();//生成一个菜单栏
QMenu *pFile=mBar->addMenu("文件");//给菜单栏添加一个菜单名设置为文件;pFile就是指向这个文件菜单
QAction *pnew= pFile->addAction("新建");//添加菜单项,pnew指向,新建菜单项 的动作返回值
connect(pnew,&QAction::triggered,
[=]()
{
qDebug()<<"新建被按下";
}
);
pFile->addSeparator();//添加分割线
QAction *popen =pFile->addAction("打开");//再添加一个菜单项,pFile是指向菜单名为文件
//工具栏,菜单项的快捷方式;菜单栏下面的图标快捷工具
QToolBar *toolBar =addToolBar("toolBar");//添加工具栏,菜单栏下面的可视化图标工具快捷键 toolBar指向菜单栏
toolBar->addAction( pnew );//工具栏添加快捷键,添加了一个指向新建菜单项
QPushButton *b=new QPushButton(this);//在工具栏添加一个按键
b->setText("按键1");
//添加小控件
toolBar->addWidget(b);//添加控件为b按钮的控件
connect(b,&QPushButton::clicked,
[=]() //()里面可以添加信号的参数列表 clicked 发了个bool 型 那么
{
b->setText("123");//按一次就变名字
}
);
resize(500,500);
//以下是状态栏*********************
QStatusBar *sBar =statusBar();//
QLabel *lable = new QLabel(this);//新建一个标签
lable->setText("Normal text file");//给标签一个名字
sBar->addWidget(lable);//状态栏 添加一个控件
//默认从左往右边添加
sBar->addWidget(new QLabel("2",this)); // 状态栏添加一个控件 ,控件为2 且控件父对象是这个窗口
//状态栏 添加控件,从右边往左边添加
sBar->addPermanentWidget(new QLabel("3",this));
//核心控件*********************************
QTextEdit *textEdit =new QTextEdit(this);//文本编辑器指定父对象为this
setCentralWidget(textEdit); //设计一个核心控件,为文本编辑器
//浮动窗口
QDockWidget *dock=new QDockWidget(this);//一个新的浮动窗口
addDockWidget(Qt::RightDockWidgetArea,dock);//F1进去看填什么参数,点击参数枚举从中看到第一个参数例子
//添加一个浮动窗口dock 放在右边
//模态对话框,弹出的窗口,无法操作主窗口
//非模态对话框,弹出的窗口,且可以操作主窗口;
QMenu *menu =mBar->addMenu("对话框");
QAction *p1= menu->addAction("模态对话框");
connect(p1,QAction::triggered,
[=]()
{
QDialog dlg;//一个对话框
dlg.show();//显示对话框
dlg.exec();//因为这个一直不退出,主窗口也不执行
qDebug()<<"1111";
}
);
QAction *p2= menu->addAction("非模态对话框");
connect(p2,QAction::triggered,
[=]()
{
//QDialog dlg;//一个对话框 这个因为会被释放,所以改成主窗口的成员在.h文件增加
//或者 动态申请 对话框 QDialog *p_dlg = new QDialog(this);
//动态申请 不好 如果多次进入非模块组,内存只会整个程序结束才释放。内存越来越少
// QDialog *p_dlg = new QDialog(this);
// p_dlg->show();
// p_dlg->setAttribute(Qt::WA_DeleteOnClose,true);//F1进入,第一参,关闭的时候释放
//QDialog dlg;//一个对话框 这个因为会被释放,所以改成主窗口的成员在.h文件增加
dlg.show();//显示对话框
// dlg.exec();//非模态不能用这个,会阻塞
qDebug()<<"1111";
}
);
}
MainWindow::~MainWindow()
{
}
标准对话框/文本对话框
需要包含头文件#include<QMessageBox>
选中这个头可以F1进入帮助文档找到如下
void about(QWidget * parent, const QString & title, const QString & text)
参1 父类 ,参2 标题 参3 内容文本
主代码
#include "mainwindow.h"
#include <QMenuBar>//菜单栏的头文件
#include <QMenu>//菜单的头文件
#include <QAction>//动作头函数
#include <QDebug>//打印头文件
#include<QToolBar>//工具头文件,快捷图标工具
#include<QPushButton>//添加按钮
#include<QStatusBar>//状态栏的头文件
#include<QLabel>//标签头文件
#include<QTextEdit>//文本编辑器
#include<QDockWidget>//浮动窗口头文件
#include<QDialog>//标准对话窗口头文件
#include<QFileDialog>//文件对话窗口头文件
#include<QMessageBox>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//菜单栏的文件菜单
QMenuBar *mBar=menuBar();//生成一个菜单栏
QMenu *pFile=mBar->addMenu("文件");//给菜单栏添加一个菜单名设置为文件;pFile就是指向这个文件菜单
QAction *pnew= pFile->addAction("新建");//添加菜单项,pnew指向,新建菜单项 的动作返回值
connect(pnew,&QAction::triggered,
[=]()
{
qDebug()<<"新建被按下";
}
);
pFile->addSeparator();//添加分割线
QAction *popen =pFile->addAction("打开");//再添加一个菜单项,pFile是指向菜单名为文件
//工具栏,菜单项的快捷方式;菜单栏下面的图标快捷工具
QToolBar *toolBar =addToolBar("toolBar");//添加工具栏,菜单栏下面的可视化图标工具快捷键 toolBar指向菜单栏
toolBar->addAction( pnew );//工具栏添加快捷键,添加了一个指向新建菜单项
QPushButton *b=new QPushButton(this);//在工具栏添加一个按键
b->setText("按键1");
//添加小控件
toolBar->addWidget(b);//添加控件为b按钮的控件
connect(b,&QPushButton::clicked,
[=]() //()里面可以添加信号的参数列表 clicked 发了个bool 型 那么
{
b->setText("123");//按一次就变名字
}
);
resize(500,500);
//以下是状态栏*********************
QStatusBar *sBar =statusBar();//
QLabel *lable = new QLabel(this);//新建一个标签
lable->setText("Normal text file");//给标签一个名字
sBar->addWidget(lable);//状态栏 添加一个控件
//默认从左往右边添加
sBar->addWidget(new QLabel("2",this)); // 状态栏添加一个控件 ,控件为2 且控件父对象是这个窗口
//状态栏 添加控件,从右边往左边添加
sBar->addPermanentWidget(new QLabel("3",this));
//核心控件*********************************
QTextEdit *textEdit =new QTextEdit(this);//文本编辑器指定父对象为this
setCentralWidget(textEdit); //设计一个核心控件,为文本编辑器
//浮动窗口
QDockWidget *dock=new QDockWidget(this);//一个新的浮动窗口
addDockWidget(Qt::RightDockWidgetArea,dock);//F1进去看填什么参数,点击参数枚举从中看到第一个参数例子
//添加一个浮动窗口dock 放在右边
//模态对话框,弹出的窗口,无法操作主窗口
//非模态对话框,弹出的窗口,且可以操作主窗口;
QMenu *menu =mBar->addMenu("对话框");
QAction *p1= menu->addAction("模态对话框");
connect(p1,QAction::triggered,
[=]()
{
QDialog dlg;//一个对话框
dlg.show();//显示对话框
dlg.exec();//因为这个一直不退出,主窗口也不执行
qDebug()<<"1111";
}
);
QAction *p2= menu->addAction("非模态对话框");
connect(p2,QAction::triggered,
[=]()
{
//QDialog dlg;//一个对话框 这个因为会被释放,所以改成主窗口的成员在.h文件增加
//或者 动态申请 对话框 QDialog *p_dlg = new QDialog(this);
//动态申请 不好 如果多次进入非模块组,内存只会整个程序结束才释放。内存越来越少
// QDialog *p_dlg = new QDialog(this);
// p_dlg->show();
// p_dlg->setAttribute(Qt::WA_DeleteOnClose,true);//F1进入,第一参,关闭的时候释放
//QDialog dlg;//一个对话框 这个因为会被释放,所以改成主窗口的成员在.h文件增加
dlg.show();//显示对话框
// dlg.exec();//非模态不能用这个,会阻塞
qDebug()<<"1111";
}
);
//以下是文件对话框,和标准对话框***************
//*************下面是标准对话框
QAction *p3= menu->addAction("关于对话框");
connect(p3,QAction::triggered,
[=]()
{ //参 父类 标题 内容
QMessageBox::about(this,"about","关于Qt");
}
);
QAction *p4= menu->addAction("问题对话框");
connect(p4,QAction::triggered,
[=]()
{
int ret=QMessageBox::question(this,"question","are you OK?",//参 父类 标题 内容
QMessageBox::Yes|QMessageBox::No);//指定对话框按钮,只能枚举内的
switch (ret) {
case QMessageBox::Yes:
qDebug()<<"i am ok";
break;
case QMessageBox::No:
qDebug()<<"i am bad";
break;
default:
break;
}
}
);
//*************以下是文件对话框 *********
QAction *p5= menu->addAction("文件对话框");
connect(p5,QAction::triggered,
[=]()
{ //获取打开文件名称 参 父类 标题 内容
//返回为字符串 ,文件路径
QString str =QFileDialog::getOpenFileName(
this,"open","../",//父类,文本备注,上一级路径
"souce(*.cpp *.h);;Text(*.txt);;all(*.*)"//过滤选项
);
qDebug()<<str;
}
);
}
MainWindow::~MainWindow()
{
}
F1进入帮助文档,标准对话
QMessageBox::question(this,"question","are you OK?");使用F1进入帮助文档,
函数定义,有返回值
返回值枚举
标准对话框效果如下
F1 进入帮助文档文件对话
共有成员如下
QString getOpenFileName(QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)
如下是getOpenFileName解析和举例
参数 : 父类, 文本备注,路径文本类型 ,过滤类型文本;
文件对话框效果图
打印出文件路径