目录
002 QStackedWidget Class(堆栈窗体)
01 QLayout&QStackedWidget类
001 QLayout(基本布局)
Qt提供QHBoxLayout类、QVBoxLayout类、QGridLayout类等基本布局管理。
类 | 父类 | 子类 |
QLayout Class | QObject and QLayoutItem | QBoxLayout,QFormLayout,QGridLayout,QStackedLayout |
QBoxLayout Class | QLayout | QBoxLayout,QVBoxLayout |
QGridLayout Class | QLayout | ———— |
QLayout Class | QLayout | ———— |
各类之间继承关系:
案例:
(1)创建dialog项目。
(2)修改"dialog.h"文件。
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QTextEdit>
#include <QGridLayout>
#include <QPushButton>
#include <QHBoxLayout>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private:
//左侧:网格布局
QGridLayout *lLayout;
QLabel *UserNumber;
QLineEdit *UserNumberEdit;
QLabel *UserName;
QLineEdit *UserNameEdit;
QLabel *UserSex;
QComboBox *UserSexComboEdit;
QLabel *UserDepart;
QTextEdit *UserDepartTextEdit;
QLabel *UserAge;
QLineEdit *UserAgeLineEdit;
//右侧:竖直布局
QVBoxLayout *RightLayout;
QLabel *MyselfInfo;
QTextEdit *MyselfInfoTextEdit;
//右侧下部分
QPushButton *okbutton;
QPushButton *cancelbutton;
QHBoxLayout *buttonLayout;
};
#endif // DIALOG_H
(3)修改"dialog.cpp"文件。
#include "dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
//左侧控件
setWindowTitle("员工信息");
UserNumber = new QLabel("员工工号:");
UserNumberEdit = new QLineEdit;
UserName = new QLabel("员工姓名:");
UserNameEdit = new QLineEdit;
UserSex = new QLabel("员工性别:");
UserSexComboEdit = new QComboBox;
UserSexComboEdit ->addItem("男");
UserSexComboEdit ->addItem("女");
UserDepart = new QLabel("所在部门:");
UserDepartTextEdit = new QTextEdit;
UserAge = new QLabel("员工年龄");
UserAgeLineEdit = new QLineEdit;
//右侧控件
RightLayout = new QVBoxLayout();
MyselfInfo = new QLabel("个人简历:");
MyselfInfoTextEdit = new QTextEdit;
RightLayout ->addWidget(MyselfInfo);
RightLayout ->addWidget(MyselfInfoTextEdit);
//右侧下部分
okbutton = new QPushButton("确认");
cancelbutton = new QPushButton("退出");
buttonLayout = new QHBoxLayout();
buttonLayout->addStretch();
buttonLayout->addWidget(okbutton);
buttonLayout->addWidget(cancelbutton);
//网格布局,将控件添加到布局中
lLayout = new QGridLayout();
lLayout->addWidget(UserNumber,0,0);
lLayout->addWidget(UserNumberEdit,0,1);
lLayout->addWidget(UserName,1,0);
lLayout->addWidget(UserNameEdit,1,1);
lLayout->addWidget(UserSex,2,0);
lLayout->addWidget(UserSexComboEdit,2,1);
lLayout->addWidget(UserDepart,3,0);
lLayout->addWidget(UserDepartTextEdit,3,1);
lLayout->addWidget(UserAge,4,0);
lLayout->addWidget(UserAgeLineEdit,4,1);
QGridLayout *mlayout = new QGridLayout(this);
mlayout->addLayout(lLayout,0,0);
mlayout->addLayout(RightLayout,0,1);
mlayout->addLayout(buttonLayout,1,1);
}
Dialog::~Dialog()
{
}
(4)结果演示。
002 QStackedWidget Class(堆栈窗体)
类 | 父类 | 子类 |
QStackedWidget Class | QFrame | ———— |
QFrame Class | QWidget | QAbstractScrollArea、QLabel、QLCDNumber、QSplitter、QStackedWidget、QToolBox |
QStackedWidget控件相当于一个窗口一样,提供一个空间专门存放一些控件(并且每次只能有一个控件可见,被设置为当前的控件)。
案例:
(1)创建dialog项目。
(2)修改"dialog.h"文件。
#ifndef STACKEDDLG_H
#define STACKEDDLG_H
#include <QMainWindow>
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>
class stackeddlg : public QMainWindow
{
Q_OBJECT
public:
stackeddlg(QWidget *parent = nullptr);
~stackeddlg();
public:
QStackedWidget *stacks;
QListWidget *qlist; //列表框控件选择
QLabel *lab1,*lab2,*lab3,*lab4,*lab5;
};
#endif // STACKEDDLG_H
(3)修改"dialog.cpp"文件。
#include "stackeddlg.h"
#include <QHBoxLayout>
stackeddlg::stackeddlg(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle("堆栈窗体测试");
this ->setGeometry(200,200,600,400);
qlist =new QListWidget(this);
qlist ->setGeometry(0,0,100,120);
qlist ->insertItem(0,"Linux1");
qlist ->insertItem(1,"Linux2");
qlist ->insertItem(2,"Linux3");
qlist ->insertItem(3,"Linux4");
qlist ->insertItem(4,"Linux5");
lab1 = new QLabel("Linux1 Qt");
lab2 = new QLabel("Linux2 Qt");
lab3 = new QLabel("Linux3 Qt");
lab4 = new QLabel("Linux4 Qt");
lab5 = new QLabel("Linux5 Qt");
QStackedWidget *statcks = new QStackedWidget(this);
statcks -> setGeometry(200,20,100,200); //该控件一次只能显示一个。
statcks -> addWidget(lab1);
statcks -> addWidget(lab2);
statcks -> addWidget(lab3);
statcks -> addWidget(lab4);
statcks -> addWidget(lab5);
QHBoxLayout *mlayout =new QHBoxLayout(this);
mlayout -> setSpacing(10);
mlayout -> addWidget(qlist);
mlayout -> addWidget(stacks,0,Qt::AlignCenter);
mlayout -> setStretchFactor(qlist,1);
mlayout -> setStretchFactor(stacks,1);
}
stackeddlg::~stackeddlg()
{
}
(4)结果演示。
02 QSplitter类与QDockWidget类
001 QSplitter类(窗口分割)
Qt提供QSplitter类来进行分裂布局,QSplitter派生于QFrame。
案例:
(1)创建mainwindow项目。
(2)修改"main.cpp"文件。
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
// w.show();
return a.exec();
}
(3)修改"mainwindow.cpp"文件。
#include "mainwindow.h"
#include <QSplitter>
#include <QTextEdit>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle("Splitter类拆分窗口测试");
//1:拆分窗口(分割窗口、分裂窗口布局)
QSplitter *spMainWindow = new QSplitter(Qt::Horizontal,0);
QTextEdit *textedit = new QTextEdit("左边主窗口",spMainWindow);
//2:拆分右边部分窗口
QSplitter *spRight = new QSplitter(Qt::Vertical,spMainWindow);
QTextEdit *teteditup = new QTextEdit("右边上部分窗口",spRight);
QTextEdit *teteditdown = new QTextEdit("右边下部分窗口",spRight);
//3:
QSplitter *sptest = new QSplitter(Qt::Vertical,spRight);
QTextEdit *txtedittest = new QTextEdit("Qt开发工程师课程",sptest);
//4:
QSplitter *sptested = new QSplitter(Qt::Horizontal,spMainWindow);
QTextEdit *txtedittestend = new QTextEdit("Qt开发学习",spMainWindow);
spMainWindow ->setWindowTitle("Splitter类拆分窗口测试");
spMainWindow ->show();
}
MainWindow::~MainWindow()
{
}
(4)结果演示。
002 QDockWidget类(停靠窗口)
QDockWidget类提供一个窗体部件,其可以停靠在QMainWindow,本身作为一个在桌面上的顶级窗口(也就是父窗体)。
Dock Windows它可以在几个区域中移动、悬浮和关闭等。通过API让程序员限制dockwidget操作。
案例:
(1)创建mainwindow项目。
(2)修改"mainwindow.h"文件。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
public:
void DockWidgetFunc();
};
#endif // MAINWINDOW_H
(3)修改"mainwindow.cpp"文件。
#include "mainwindow.h"
#include <QTextEdit>
#include <QDockWidget>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
DockWidgetFunc();
}
MainWindow::~MainWindow()
{
}
void MainWindow::DockWidgetFunc()
{
setWindowTitle("QDockWidget类停靠窗口测试:");
QTextEdit *tedit = new QTextEdit(this); //定义QTextEdit对象作为主窗口
tedit->setText("李白");
tedit -> setAlignment(Qt::AlignCenter);
setCentralWidget(tedit); //将编辑框控件设置为主窗口的中央窗体
//创建停靠窗口1
QDockWidget *dw1 = new QDockWidget("停靠窗口(一)",this);
dw1 -> setFeatures(QDockWidget::DockWidgetMovable); //可移动特性
dw1 -> setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
QTextEdit *qtedit1 = new QTextEdit();
qtedit1 ->setText(
"将进酒·君不见\n"
"君不见,黄河之水天上来,奔流到海不复回。\n"
"君不见,高堂明镜悲白发,朝如青丝暮成雪。\n"
"人生得意须尽欢,莫使金樽空对月。\n"
"天生我材必有用,千金散尽还复来。\n"
"烹羊宰牛且为乐,会须一饮三百杯。\n"
"岑夫子,丹丘生,将进酒,杯莫停。\n"
"与君歌一曲,请君为我倾耳听。\n"
" 钟鼓馔玉不足贵,但愿长醉不愿醒。\n"
"古来圣贤皆寂寞,惟有饮者留其名。\n"
"陈王昔时宴平乐,斗酒十千恣欢谑。\n"
"主人何为言少钱,径须沽取对君酌。\n"
"五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。");
dw1 -> setWidget(qtedit1);
addDockWidget(Qt::RightDockWidgetArea,dw1);
//创建停靠窗口2
QDockWidget *dw2 = new QDockWidget("停靠窗口(二)",this);
dw2->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable); //设置窗口关闭 浮动按钮
QTextEdit *qtedit2 = new QTextEdit();
qtedit2 -> setText("蜀道难:\n噫吁嚱,危乎高哉!蜀道之难,难于上青天!蚕丛及鱼凫,开国何茫然!尔来四万八千岁,不与秦塞通人烟。西当太白有鸟道,可以横绝峨眉巅。地崩山摧壮士死,然后天梯石栈相钩连。上有六龙回日之高标,下有冲波逆折之回川。黄鹤之飞尚不得过,猿猱欲度愁攀援。青泥何盘盘,百步九折萦岩峦。扪参历井仰胁息,以手抚膺坐长叹。 问君西游何时还?畏途巉岩不可攀。但见悲鸟号古木,雄飞雌从绕林间。又闻子规啼夜月,愁空山。蜀道之难,难于上青天,使人听此凋朱颜!连峰去天不盈尺,枯松倒挂倚绝壁。飞湍瀑流争喧豗,砯崖转石万壑雷。其险也如此,嗟尔远道之人胡为乎来哉!剑阁峥嵘而崔嵬,一夫当关,万夫莫开。所守或匪亲,化为狼与豺。朝避猛虎,夕避长蛇;磨牙吮血,杀人如麻。锦城虽云乐,不如早还家。蜀道之难,难于上青天,侧身西望长咨嗟!");
dw2 -> setWidget(qtedit2);
addDockWidget(Qt::RightDockWidgetArea,dw2);
}
(4)结果演示。
03 Qt文件对话框实战
001 QFileDialog(文件对话框)
通过QFileDialog类允许用户遍历系统文件,选择一个或多个文件或目录。
案例:
(1)创建Dialog项目。
(2)修改"dialog.h"文件。
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QFileDialog>
#include <QPushButton>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private:
QLabel *FileNameLabel;
QLineEdit *FileNameLineEdit;
QPushButton *FileButton;
QLabel *FileSizeLabel;
QLineEdit *FileSizeLabelLineEdit;
QPushButton *GetFileInfoButton;
private slots:
void GetFileInfo(); //打开文件函数
void GetFileSizeFunc(); //获取文件大小函数
};
#endif // DIALOG_H
(3)修改"dialog.cpp"文件。
#include "dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
setWindowTitle("FileDialog文件对话框测试");
//创建控件
FileNameLabel = new QLabel("文件名称:");
FileNameLineEdit = new QLineEdit;
FileButton = new QPushButton("选择...");
FileSizeLabel = new QLabel("文件大小:");
FileSizeLabelLineEdit = new QLineEdit;
GetFileInfoButton = new QPushButton("获取文件大小");
//排列布局
QGridLayout *glayout = new QGridLayout;
glayout->addWidget(FileNameLabel,0,0);
glayout->addWidget(FileNameLineEdit,0,1);
glayout->addWidget(FileButton,0,2);
glayout->addWidget(FileSizeLabel,1,0);
glayout->addWidget(FileSizeLabelLineEdit,1,1,1,2);
glayout->addWidget(GetFileInfoButton,2,0,1,3);
QVBoxLayout *vlayout = new QVBoxLayout(this);
vlayout->addLayout(glayout);
connect(FileButton,SIGNAL(clicked(bool)),this,SLOT(GetFileInfo()));
connect(GetFileInfoButton,SIGNAL(clicked()),this,SLOT(GetFileSizeFunc()));
}
Dialog::~Dialog()
{
}
void Dialog::GetFileInfo() //打开文件函数
{
QString strFileName = QFileDialog::getOpenFileName(this,"打开","/","Files(*)"); //读取文件路径
FileNameLineEdit ->setText(strFileName); //将文件路径写入控件中
}
void Dialog::GetFileSizeFunc() //获取文件大小函数
{
//获取单行编辑框控件里面文件路径等
QString strFileNames = FileNameLineEdit->text(); //获取文件路径
QFileInfo fileinfo(strFileNames); //获取文件信息
qint64 FileSize=fileinfo.size(); //获取文件大小
FileSizeLabelLineEdit->setText(QString::number(FileSize)); //将文件大小显示到控件
}
(4)结果演示。
04 QColorDialog颜色对话框实战
001 QColorDialog类(颜色对话框)
Qt中提供标准对话框,其中QColorDialog类(颜色对话框)。备注:不同系统平台显示结果有所不同(原因系统主题风格不一致,但功能相同)。
案例:
(1)创建Dialog项目。
(2)修改"dialog.h"文件。
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QPushButton>
#include <QFrame>
#include <QColorDialog>
#include <QGridLayout>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private:
QGridLayout *glayout;
QPushButton *colorbutton;
// QFrame类是基本控件的基类,QWidget是QFrame类型
QFrame *colorFrame;
private slots:
void dispcolorFunc();
};
#endif // DIALOG_H
(3)修改"dialog.cpp"文件。
#include "dialog.h"
#include <QPushButton>
#include <QDebug>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
setWindowTitle("颜色对话框");
glayout = new QGridLayout(this); //新建一个布局对象
colorbutton = new QPushButton("调用颜色对话框");
colorFrame = new QFrame;
colorFrame->setFrameShape(QFrame::Box); //设置形状
colorFrame->setAutoFillBackground(true); //填充背景处理
glayout ->addWidget(colorbutton,0,0);
glayout ->addWidget(colorFrame,1,0);
connect(colorbutton,SIGNAL(clicked()),this,SLOT(dispcolorFunc()));
}
Dialog::~Dialog()
{
}
void Dialog::dispcolorFunc()
{
QColor colorvalues = QColorDialog::getColor(Qt::red); //获取颜色值,默认选择红色
if(colorvalues.isValid())
{
colorFrame->setPalette(QPalette(colorvalues));
}
}
(4)结果演示。
05 QFontDialog字体对话框实战
001 QFontDialog类(字体对话框类)
Qt提供字体对话框选择(字体、字号、样式等)。
案例:
(1)创建Dialog项目。
(2)修改"dialog.h"文件。
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QLineEdit>
#include <QFontDialog>
#include <QGridLayout>
#include <QPushButton>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private:
QGridLayout *glayout;
QPushButton *fontButton;
QLineEdit *fontlineedit;
private slots:
void dispFontFunc();
};
#endif // DIALOG_H
(3)修改"dialog.cpp"文件。
#include "dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
setWindowTitle("字体对话框设置");
glayout = new QGridLayout(this);
fontButton = new QPushButton("调用字体对话框");
fontlineedit = new QLineEdit;
fontlineedit->setText("Qt开发工程师");
glayout ->addWidget(fontButton,0,0);
glayout ->addWidget(fontlineedit,0,1);
connect(fontButton,SIGNAL(clicked(bool)),this,SLOT(dispFontFunc()));
}
Dialog::~Dialog()
{
}
void Dialog::dispFontFunc()
{
bool isbool;
QFont font = QFontDialog::getFont(&isbool); //获取字体形式
if(isbool) //判断字体形式是否被修改
{
fontlineedit->setFont(font);
}
}
(4)结果演示。
06 QInputDialog类输入对话框实战
001 QInputDialog类(输入对话框)
Qt提供标准输入对话框(QInputDialog类),里面各个控件由工程师自己决定,方便定制开发使用。
案例:
(1)创建Dialog项目。
(2)修改"dialog.h"文件。
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QGridLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QInputDialog>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private:
QGridLayout *glayout;
QPushButton *inputstudentnobutton;
QLineEdit *inputsstudentlineedit;
QPushButton *inputstudentnamebutton;
QLineEdit *inputsstudentnamelineedit;
QPushButton *inputstudentsexbutton;
QLineEdit *inputsstudentsexlineedit;
QPushButton *inputstudentscorebutton;
QLineEdit *inputsstudentscorelineedit;
private slots:
void modifystudentno();
void modifystudentsex();
};
#endif // DIALOG_H
(3)修改"dialog.cpp"文件。
#include "dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
setWindowTitle("标准对话框窗体测试");
resize(260,110);
//布局
glayout = new QGridLayout(this);
inputstudentnobutton = new QPushButton;
inputstudentnobutton->setText("学生学号:");
inputsstudentlineedit = new QLineEdit("20170716");
inputstudentnamebutton = new QPushButton;
inputstudentnamebutton->setText("学生姓名:");
inputsstudentnamelineedit = new QLineEdit("张三");
inputstudentsexbutton = new QPushButton;
inputstudentsexbutton->setText("学生性别:");
inputsstudentsexlineedit = new QLineEdit("男");
inputstudentscorebutton = new QPushButton;
inputstudentscorebutton->setText("学生分数:");
inputsstudentscorelineedit = new QLineEdit("100");
glayout->addWidget(inputstudentnobutton,0,0);
glayout->addWidget(inputsstudentlineedit,0,1);
glayout->addWidget(inputstudentnamebutton,1,0);
glayout->addWidget(inputsstudentnamelineedit,1,1);
glayout->addWidget(inputstudentsexbutton,2,0);
glayout->addWidget(inputsstudentsexlineedit,2,1);
glayout->addWidget(inputstudentscorebutton,3,0);
glayout->addWidget(inputsstudentscorelineedit,3,1);
connect(inputstudentnobutton,SIGNAL(clicked(bool)),this,SLOT(modifystudentno()));
connect(inputstudentsexbutton,SIGNAL(clicked(bool)),this,SLOT(modifystudentsex()));
}
Dialog::~Dialog()
{
}
void Dialog::modifystudentno()
{
bool isbool;
QString strText=QInputDialog::getText(this,"标准对话框","请输入学号:",
QLineEdit::Normal,inputsstudentlineedit->text(),&isbool);
if(isbool && !strText.isEmpty())
{
inputsstudentlineedit->setText(strText);
}
}
void Dialog::modifystudentsex()
{
QStringList strSexItems;
strSexItems<<"男"<<"女";
bool isbool;
QString strsexItem= QInputDialog::getItem(this,"标准输入对话框","请选择性别:",strSexItems,0,false,&isbool);
if(isbool&&!strsexItem.isEmpty())
{
inputsstudentsexlineedit->setText(strsexItem);
}
}
(4)结果演示。
07 QMessageBox类消息框实战
001 QMessageBox类(消息框)
Qt提供QMessageBox类消息框应用,它是一个常用的模式对话框,专门用于显示和提示性消息,用户可通过淡季标准按钮来响应用户的需求。
案例:
(1)创建Dialog项目。
(2)修改"dialog.h"文件。
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QGridLayout>
#include <QMessageBox>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private:
QGridLayout *glayout;
QLabel *displabel;
QPushButton *questionbutton; //问题消息框命令按钮
QPushButton *informationbutton; //信息消息框命令按钮
QPushButton *warningbutton; //警告消息框命令按钮
QPushButton *criticalbutton; //错误消息框命令按钮
QPushButton *aboutbutton; //关于消息框命令按钮
QPushButton *aboutqbuttonn; //
private slots:
void displayquestionMsg();
void displayinformationMsg();
void displaywarningMsg();
void displaycriticalMsg();
void displayaboutMsg();
void displayaboutqMsg();
};
#endif // DIALOG_H
(3)修改"dialog.cpp"文件。
#include "dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
resize(320,150);
glayout = new QGridLayout(this);
displabel = new QLabel("请你选择一个消息框");
questionbutton = new QPushButton("QuestionMsg"); //问题消息框命令按钮
informationbutton= new QPushButton("informationMsg"); //信息消息框命令按钮
warningbutton= new QPushButton("warningMsg"); //警告消息框命令按钮
criticalbutton= new QPushButton("criticalMsg"); //错误消息框命令按钮
aboutbutton= new QPushButton("aboutMsg"); //关于消息框命令按钮
aboutqbuttonn= new QPushButton("aboutqMsg"); //
glayout ->addWidget(displabel,0,0,1,2);
glayout ->addWidget(questionbutton,1,0);
glayout ->addWidget(informationbutton,1,1);
glayout ->addWidget(warningbutton,2,0);
glayout ->addWidget(criticalbutton,2,1);
glayout ->addWidget(aboutbutton,3,0);
glayout ->addWidget(aboutqbuttonn,3,1);
connect(questionbutton,SIGNAL(clicked(bool)),this,SLOT(displayquestionMsg()));
connect(informationbutton,SIGNAL(clicked(bool)),this,SLOT(displayinformationMsg()));
connect(warningbutton,SIGNAL(clicked(bool)),this,SLOT(displaywarningMsg()));
connect(criticalbutton,SIGNAL(clicked(bool)),this,SLOT(displaycriticalMsg()));
connect(aboutbutton,SIGNAL(clicked(bool)),this,SLOT(displayaboutMsg()));
connect(aboutqbuttonn,SIGNAL(clicked(bool)),this,SLOT(displayaboutqMsg()));
}
Dialog::~Dialog()
{
}
void Dialog::displayquestionMsg()
{
displabel->setText("Question Message Box");
switch(QMessageBox::question(this,"Question消息框","你是否想退出应用程序,请选择?", //QMessageBox::question中"question"与消息框显示图标有关
QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok))
{
case QMessageBox::Ok:
displabel->setText("你选择QuestionMsg命令按钮中的button/ok!");
break;
case QMessageBox::Cancel:
displabel->setText("你选择QuestionMsg命令按钮中的button/cancel!");
break;
}
return;
}
void Dialog::displayinformationMsg()
{
displabel->setText("Information Message Box");
QMessageBox::information(this,"Information消息框","Information消息框测试成功");
}
void Dialog::displaywarningMsg()
{
displabel->setText("Warning Message Box");
switch(QMessageBox::warning(this,"Warning消息框","是否删除数据库student.mdb,请注意数据操作安全?",
QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,QMessageBox::Save))
{
case QMessageBox::Save:
displabel->setText("你选择WarningMsg命令按钮中的button/Save!");
break;
case QMessageBox::Discard:
displabel->setText("你选择WarningMsg命令按钮中的button/Discard!");
break;
case QMessageBox::Cancel:
displabel->setText("你选择WarningMsg命令按钮中的button/cancel!");
break;
}
return;
}
void Dialog::displaycriticalMsg()
{
displabel->setText("critical QMessageBox");
QMessageBox::critical(this,"critical消息框","数据库文件备份错误,请重新检查");
}
void Dialog::displayaboutMsg()
{
displabel->setText("about QMessageBox");
QMessageBox::about(this,"about消息框","测试Qt about消息框");
}
void Dialog::displayaboutqMsg()
{
displabel->setText("about Qt QMessageBox");
QMessageBox::about(this,"about消息框","测试about Qt消息框");
}
(4)结果演示。
08 Qt自定义消息框实战
Qt提供自定义消息框,让用户根据需求定制QMessageBox消息框。
案例:
(1)创建Dialog项目。
(2)修改"dialog.h"文件。
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QMessageBox>
#include <QLabel>
#include <QGridLayout>
#include <QPushButton>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private:
QLabel *labelmsg,*labeldispmsg;
QPushButton *msgbutton;
QGridLayout *glayout;
private slots:
void customMsg();
};
#endif // DIALOG_H
(3)修改"dialog.cpp"文件。
#include "dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
resize(260,90);
glayout=new QGridLayout(this);
labelmsg=new QLabel("自定义消息框");
msgbutton=new QPushButton("测试操作");
labeldispmsg=new QLabel("未测试状态");
glayout->addWidget(labelmsg,0,0);
glayout->addWidget(msgbutton,0,1);
glayout->addWidget(labeldispmsg,1,0,1,1);
connect(msgbutton,SIGNAL(clicked()),this,SLOT(customMsg()));
}
Dialog::~Dialog()
{
}
void Dialog::customMsg()
{
QMessageBox cMsgBox;
cMsgBox.setWindowTitle("零声教育消息框");
// 添加按钮
QPushButton *yes=cMsgBox.addButton("YES",QMessageBox::ActionRole);
QPushButton *no=cMsgBox.addButton("NO",QMessageBox::ActionRole);
// 添加图标
cMsgBox.setIconPixmap(QPixmap("E:\\File\\Code_Program\\C_C++\\Qt\\Learn\\LingShengQt\\QCustomeMessageBoxPross\\J20.jpg"));
cMsgBox.exec();
// 判断用户点击按钮 yes no
if(cMsgBox.clickedButton()==yes)
{
labeldispmsg->setText("用户点击YES按钮");
}
else if(cMsgBox.clickedButton()==no)
{
labeldispmsg->setText("用户点击NO按钮");
}
}
(4)结果演示。
推荐课程:
https://xxetb.xetslk.com/s/vgpHh