先挂一张效果图:
添加的部件:
对话框:
- 模态对话框
- 非模态对话框
- 问题对话框
- 关于对话框
- 文件对话框
工具栏
状态栏
文本编辑器
浮动窗口
概念介绍:
添加菜单项:菜单项指的是如图所示的对话框里的东西
- 模态对话框:模态对话框打开时,无法操作其他窗口;
- 非模态对话框:模态对话框打开时,可以操作其他窗口;
问题对话框:点击后弹出的对话框,样式为:
关于对话框:点击之后弹出的对话框,样式如图:
Lambda表达式,匿名函数对象
C++11增加的新特性,项目文件:CONFIG+=C++11
Qt配合信号一起使用,非常方便
正常的信号槽 connect函数的用法:connect(信号发出者,信号发出者作用::操作,接收者,槽函数作用域::槽函数)
Lambda表达式下的用法:
connect(信号发出者,信号发出者作用::操作,
[=]()
{
正常槽函数中的操作
}
)
例如:
详细讲解:
项目创建:除图示外都是下一步
pro工程文件添加代码:(因为一会会用到Lambda表达式)main.cpp里面内容不变
CONFIG += C++11
main.cpp里面内容不变
以下为MainWindow.cpp文件下的操作:
MainWindow.cpp文件中的头文件
#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 <QMessageBox> //标准对话框
创建菜单栏:
//菜单栏
QMenuBar *mBar = menuBar();
//添加菜单
QMenu *pFile = mBar->addMenu("对话框");
创建模态对话框:
QAction *p1 = pFile->addAction("模态对话框");
connect(p1,&QAction::triggered,
[=]()
{
QDialog dlg;
dlg.exec();
qDebug() << "模态对话框打开时,无法操作其他";
}
);
pFile->addSeparator(); //添加分割线
创建非模态对话框:
QAction *p2 = pFile->addAction("非模态对话框");
connect(p2,&QAction::triggered,
[=]()
{
QDialog *dlg = new QDialog(this);
dlg->setAttribute(Qt::WA_DeleteOnClose); //防止内存泄漏,此函数的作用为关闭对话框时自动释放
dlg->show();
qDebug() << "非模态对话框打开时,可以操作其他";
}
);
pFile->addSeparator(); //添加分割线
创建关于对话框:
pFile->addSeparator(); //添加分割线
QAction *p3 = pFile->addAction("关于对话框");
connect(p3,&QAction::triggered,
[=]()
{
QMessageBox::about(this,"about","充值成功"); //about(父类,标题名,对话框内容);
}
);
pFile->addSeparator(); //添加分割线
创建问题对话框:
QAction *p4 = pFile->addAction("问题对话框");
connect(p4,&QAction::triggered,
[=]()
{
QMessageBox::question(this,"question","是否充值"); //question(父类,标题名,对话框内容);
}
);
工具栏: 菜单项的快捷方式:
第一种创建方式:直接把对话框内的对象传进去,直接显示文字,缺乏美感
QToolBar *toolBar = addToolBar("toolBar");
//工具栏添加快捷键
toolBar->addAction(p1);
第二种创建方式:以按钮的方式创建
QPushButton *b = new QPushButton(this);
b->setText("新建");
toolBar->addWidget(b);
connect(b,&QPushButton::clicked,this,&MainWindow::MySlot);
状态栏:菜单栏底部
第一种方式:利用label标签的方式
QStatusBar *sBar = statusBar();
QLabel *MyLabel = new QLabel(this);
MyLabel->setText("第一种添加方式 ");
sBar->addWidget(MyLabel);
第二种方式:直接传参
sBar->addWidget(new QLabel("addwidget从左往右添加",this));
sBar->addPermanentWidget(new QLabel("addPermanentWidget从右往左添加",this));
文本编辑区:
QTextEdit *MyQTE = new QTextEdit(this); //this当前父类
setCentralWidget(MyQTE);
浮动窗口:可以移动的窗口,并可以贴在上下窗体
QDockWidget *dock = new QDockWidget(this);
addDockWidget(Qt::RightDockWidgetArea,dock);
//给浮动窗口添加文本编辑区
QTextEdit *MyDockQTE = new QTextEdit(this);
dock->setWidget(MyDockQTE);
更改弹出对话框的按钮名称:
在QT的帮助文档中QMessageBox的Constant:
所以你可以通过查看帮助文档找到自己合适的按钮
将问题对话框的的yes,no改为ok,cancel
文件对话框:
open文件夹,显示下拉框,并返回当前文件的路径,打印出来
pFile->addSeparator(); //添加分割线
QAction *p5 = pFile->addAction("文件对话框");
connect(p5,&QAction::triggered,
[=]()
{
QString path = QFileDialog::getOpenFileName(
this,
"open",
"../",
"souce(*.cpp *.h);;"
"Text(*.txt);;"
"all(*.*)" );
qDebug() << path;
}
);
下拉框:
路径打印:
源代码:
其中main函数不变,pro工程文件添加刚刚说的代码;
MainWindow.h文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
void MySlot();
};
#endif // MAINWINDOW_H
MainWindow.cpp文件:
#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 <QMessageBox> //标准对话框
#include <QFileDialog> //文件对话框
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//菜单栏
QMenuBar *mBar = menuBar();
//添加菜单
QMenu *pFile = mBar->addMenu("对话框");
//添加菜单项,动作
//模态对话框
QAction *p1 = pFile->addAction("模态对话框");
connect(p1,&QAction::triggered,
[=]()
{
QDialog dlg;
dlg.exec();
qDebug() << "模态对话框打开时,无法操作其他";
}
);
//非模态对话框
pFile->addSeparator(); //添加分割线
QAction *p2 = pFile->addAction("非模态对话框");
connect(p2,&QAction::triggered,
[=]()
{
QDialog *dlg = new QDialog(this);
dlg->setAttribute(Qt::WA_DeleteOnClose); //防止内存泄漏,此函数的作用为关闭对话框时自动释放
dlg->show();
qDebug() << "非模态对话框打开时,可以操作其他";
}
);
//关于对话框
pFile->addSeparator(); //添加分割线
QAction *p3 = pFile->addAction("关于对话框");
connect(p3,&QAction::triggered,
[=]()
{
QMessageBox::about(this,"about","充值成功"); //about(父类,标题名,对话框内容);
}
);
//问题对话框
pFile->addSeparator(); //添加分割线
QAction *p4 = pFile->addAction("问题对话框");
connect(p4,&QAction::triggered,
[=]()
{
QMessageBox::question(this,"question","是否充值",QMessageBox::Ok,QMessageBox::Cancel); //question(父类,标题名,对话框内容);
}
);
//文件对话框
pFile->addSeparator(); //添加分割线
QAction *p5 = pFile->addAction("文件对话框");
connect(p5,&QAction::triggered,
[=]()
{
QString path = QFileDialog::getOpenFileName(
this,
"open",
"../",
"souce(*.cpp *.h);;"
"Text(*.txt);;"
"all(*.*)" );
qDebug() << path;
}
);
//工具栏 菜单项的快捷方式
QToolBar *toolBar = addToolBar("toolBar");
//工具栏添加快捷键
toolBar->addAction(p1);
//添加小控件
QPushButton *b = new QPushButton(this);
b->setText("新建");
toolBar->addWidget(b);
connect(b,&QPushButton::clicked,this,&MainWindow::MySlot);
//状态栏
QStatusBar *sBar = statusBar();
QLabel *MyLabel = new QLabel(this);
MyLabel->setText("第一种添加方式 ");
sBar->addWidget(MyLabel);
// addwidget从左往右添加
sBar->addWidget(new QLabel("addwidget从左往右添加",this));
sBar->addPermanentWidget(new QLabel("addPermanentWidget从右往左添加",this));
//文本编辑区
QTextEdit *MyQTE = new QTextEdit(this);
setCentralWidget(MyQTE);
//浮动窗口
QDockWidget *dock = new QDockWidget(this);
addDockWidget(Qt::RightDockWidgetArea,dock);
//给浮动窗口添加文本编辑区
QTextEdit *MyDockQTE = new QTextEdit(this);
dock->setWidget(MyDockQTE);
}
void MainWindow::MySlot(){
qDebug() << "新建成功";
}
MainWindow::~MainWindow()
{
}