文章目录
QT Creator 对话框QDialog(认识信号槽,颜色对话框,文件对话框,字体对话框,输入对话框,消息对话框,向导会话框)
mainWindow.cpp 文件下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog> //所有对话窗口类的基类
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//构造函数中定义一个QDialog类 this 指定父窗口为MainWindow类
QDialog dialog(this);
//调用show函数让其显示 如果此时运行 发现一个小窗口一闪而过
//因为在一个函数中定义的变量,等这个函数执行完毕后,他就会自动释放,
dialog.show();
}
MainWindow::~MainWindow()
{
delete ui;
}
//为了不让dialog类消失 可以将QDialog对象的创建代码更改为:
QDialog* dialog = new QDialog(this);
dialog->show();
认识信号和槽
mainwindow.h文件下:
/*自定义的槽 必须要声明slots 这里的public 表明这个槽可以被外接调用,
* 这边声明后 要到源文件中编写这个槽的实现代码,QT设计的快捷方式 alt+enter
* 会出现 在mainwindow.cpp中添加声明 再次回车 编译器就会转到 mainwindow.cpp文件
* 并且创建 showChildDialog()槽的定义 只需要在其中添加代码即可
* -----
* 这种方法也适用于 先在源文件中添加定义 然后自动在头文件中添加声明 的情况
*
* */
public slots:
//void showChildDialog();
void on_showChildButton_clicked();
};
#endif // MAINWINDOW_H
mainwindow.cpp 文件下
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog> //所有对话窗口类的基类
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//构造函数中定义一个QDialog类 this 指定父窗口为MainWindow类
//QDialog dialog(this);
//调用show函数让其显示 如果此时运行 发现一个小窗口一闪而过
//因为在一个函数中定义的变量,等这个函数执行完毕后,他就会自动释放,
//dialog.show();
//为了不让dialog类消失 可以将QDialog对象的创建代码更改为:
//QDialog* dialog = new QDialog(this);
//dialog->show();
//其实不用指针也能将对话框显示出来 可以将代码 更改如下
//运行后会发现 对话框弹出来了 但是mainWindow没有弹出来 称之为 模块对话框 上面的为非模块对话框
//QDialog dialog(this);
// dialog.exec();
//ui->setupUi(this);
/*
* 这里使用的connect() 函数将按钮的单击信号 clicked() 与新建的槽进行关联
* clicked() 早 QPushButton类中进行了定义 而 connect() 是QObject类中的函数
* 因为类继承自QObject 所以可以直接使用,
* 四个参数: 1.发送信号的对象 2. 发送的信号 3.接收信号的对象 4.要执行的槽
* 信号和槽 分别使用 SIGNAL() SLOT() 宏 括起来
**/
//connect(ui->showChildButton,SIGNAL(clicked()),this,SLOT(showChildDialog()));
}
MainWindow::~MainWindow()
{
delete ui;
}
//void MainWindow::showChildDialog()
void MainWindow::on_showChildButton_clicked()
{
QDialog *dialog = new QDialog(this);
dialog->show();
}
颜色对话框
创建一个新的Qt GUI应用 明明为myDialog2 , 类名 mainwindow , 基类名 MainWindow ,
双击mainwindow.ui 进入设计模式 页面 添加一些 push Button
全选后右键 转到槽 这时
private slots 和 对应的函数实现就都有了 以下为 自动生成
mainwindow.h文件:
private slots:
void on_pushButton_clicked();
mainwindow.cpp文件:
void MainWindow::on_pushButton_clicked()
{
}
修改后的代码:
void MainWindow::on_pushButton_clicked()
{
/*
* 使用 QColorDialog的静态函数 getColor来获取颜色
* 参数 1.设置初始颜色 2.父窗口 3.对话框标题
* Qt::red qt预定义的颜色对象
* 返回值:是一个QColor类型数据
* 如果现在运行 进入颜色对话框 直接点击确认
* 返回结果为: color: QColor(ARGB 1, 1, 0, 0)
* 四个参数为:A透明度 R红 G绿色 B蓝色
**/
QColor color = QColorDialog::getColor(Qt::red,this,tr("颜色对话框"));
qDebug() << "color:" << color;
}
还可以再添加第四个参数
void MainWindow::on_pushButton_clicked()
{
/*
* 参数 1.设置初始颜色 2.父窗口 3.对话框标题 4. 显示alpha(透明度)的设置内容的
**/
QColor color = QColorDialog::getColor(Qt::red,this,tr("颜色对话框"),QColorDialog::ShowAlphaChannel);
qDebug() << "color:" << color;
}
文件对话框
在原来的基础上 继续操作
mainwindow.cpp文件:
#include <QFileDialog> //文件对话头文件
/*
* 文件对话框按钮的单击信号槽
* */
void MainWindow::on_pushButton_2_clicked()
{
/*
*getOpenFileName() 获取选取的文件名 这个函数以一个模态方式运行一个对话框。然后选择一个文件,
* 单击“打开”后,这个函数就可以返回一个文件的文件名
* 参数: 1.父窗口 2.设置对话框标题 3.指定默认打开的文件路径
* 4.设置文件类型过滤器(不指定 默认所有类型的文件 ;指定的话 中间以空格隔开 多个不同类型 可以用 ;; 隔开)
*/
QString fileName = QFileDialog::getOpenFileName(this,tr("文件对话框"),"F:",tr("图片文件(*png *jpg);;文本文件(*txt)"));
qDebug() << "fileName" << fileName;
}
运行后
qDebug会在console输出显示 :
fileName “F:/L_taxy/study/C/C++ 17 标准手册/你要找的.txt”
当然 也可以获取多个文件名
void MainWindow::on_pushButton_2_clicked()
{
/*
* 如果需要多个文件名 可以使用 getOpenFileNames() 函数来获取文件名 返回值是QStringList类型
*/
//QString fileName = QFileDialog::getOpenFileName(this,tr("文件对话框"),"F:",tr("图片文件(*png *jpg);;文本文件(*txt)"));
QStringList fileNames = QFileDialog::getOpenFileNames(this,tr("文件对话框"),"F:",tr("图片文件(*png *jpg);;文本文件(*txt)"));
qDebug() << "fileNames" << fileNames;
}
你的qDegug 就会在console打印如下:
fileNames (“F:/L_taxy/study/C/C++ 17 标准手册/你要找的.txt”, “F:/L_taxy/study/C/C++ 17 标准手册/你要找的1.txt”, “F:/L_taxy/study/C/C++ 17 标准手册/你要找的2.txt”)
字体对话框
设置字体的对话框 一样的 在之前的代码上继续添加
mainwindow.cpp文件:
#include <QFontDialog> //字体对话头文件
/*
* 字体对话框的单击信号槽
**/
void MainWindow::on_pushButton_3_clicked()
{
//ok 用于标记是否单击了ok按钮,然后活的所选择的字体
bool ok;
/*
* 这里使用了QFontDialog的静态函数 getFont来获取选取的字体
* 参数: 1.bool类型变量 用来存放按下的按钮状态 this 当当前窗口
* 比如打开的字体对话框中单击了ok按钮,那么这里的ok就变成了true 告诉当前窗口已经选择了字体
*/
QFont font = QFontDialog::getFont(&ok,this);
//如果单击ok按钮 就让“字体对话框” 使用新字体
if(ok) {
ui->pushButton_3->setFont(font);
// 如果单击Cancel按钮 就在console打印以下
}else {
qDebug() << tr("没有选中字体~~!");
}
}
以下为单击后的界面:
单击ok后会发现 字体已经改变
单击Cancel后 在qt的console输出打印:
“没有选中字体~~!”
输入对话框
一样的套路
mainwindow.cpp文件:
#include <QInputDialog> //输入对话头文件
/*
* 输入对话框的单击信号槽
**/
void MainWindow::on_pushButton_4_clicked()
{
bool ok;
//获取字符串
/*1.getText()函数 提供一个可输入字符串的对话框
*参数:1.父窗口 2.设置窗口标题 3.设置对话框中的标签显示的文本 4.设置输入的字符串显示的格式(比如:密码可以是个黑点,可以按F1进去看) 5.设置输入框中的默认字符串 6.设置获取按下按钮信息的bool变量
*/
QString string = QInputDialog::getText(this,tr("输入字符串对话框"),tr("请输入名:"),QLineEdit::Normal,tr("admin"),&ok);
if(ok){
qDebug() << "string:" << string;
}
//获取整数
/*
*2.getInt() 函数 可以提供一个输入整型数值的对话框,
* 参数: 1. 父窗口 2.设置窗口标题 3. 设置对话框中的显示文本 4. 默认数值100 5. 可输入最小值-1000 6. 可输入最大值 1000 7. 10 表示箭头按钮 每次变化为10 8. 设置获取按下按钮信息的bool值
*/
int value1 = QInputDialog::getInt(this,tr("输入整数对话框"),tr("请输入 -1000到1000之间的数值"),100,-1000,1000,10,&ok);
if(ok){
qDebug() << "valu1:" << value1;
}
//获取浮点数
/*
* 3.getDouble() 函数 可以提供一个输入浮点型数值的对话框
* 参数: 1.父窗口 2.设置窗口的标题 3.设置对话框中显示文本 4. 默认值为0.0 5.最小可输入值为-1000 6.最大可输入值 1000 7. 小数点的位数 2 8.设置获取按下按钮信息的bool值
*/
double value2 = QInputDialog::getDouble(this,tr("输入浮点数对话框"),tr("请输入-1000到1000之间的数值"),0.00,-1000,1000,2,&ok);
if(ok){
qDebug() << "value2" << value2;
}
QStringList items;
items << tr("条目1") << tr("条目2");
//获取条目
/*
* getItem() 函数 提供了个可以输入一个条目的对话框 需要先给它提供一些条目比如上面的itrms
* 参数:5. 0 表示默认的是第0个条目(0就是第一个)
* 6.true 设置条目是否可以被更改 true 就是可以被更改 ; 这里使用的是静态函数 也可以自己定义对象
*/
QString item = QInputDialog::getItem(this,tr("输入条目对话框"),tr("请选择一个条目"),items,0,true,&ok);
if(ok){
qDebug() << "item:" << item;
}
}
①
②
③
④ 手动改了条目1 为 条目5
最终的输出为:
消息对话框
还是在原来的基础上做代码添加
mainwindow.cpp文件:
#include <QMessageBox> //消息对话框 头文件
/*
* 消息对话框的单击槽
**/
void MainWindow::on_pushButton_5_clicked()
{
/*
*QMessageBox 类 提供了一个模态的对话框用来通知用户一些信息 或者向用户提出一个问题并且获取答案
* 以下四种消息对话 分别拥有不同的图标和提示音(这个是操纵系统设置的)
*/
/*
*1.问题对话框
* 参数:1.父窗口 2.标题栏 3.显示信息 4.拥有的按钮(QMessageBox类提供的标准按钮)
*/
int ret1 = QMessageBox::question(this,tr("问题对话框"),tr("你了解QT吗?"),QMessageBox::Yes,QMessageBox::No);
if(ret1 == QMessageBox::Yes){
qDebug() << tr("问题!");
}
/*
* 2.提示对话框
* 1.父窗口 2.标题栏 3.显示信息 4.拥有的按钮(QMessageBox类提供的标准按钮)
*/
int ret2 = QMessageBox::information(this,tr("提示对话框"),tr("这是Qt书籍"),QMessageBox::Ok);
if(ret2 == QMessageBox::Ok){
qDebug() << tr("提示!");
}
/*
* 3.警告对话框
* 1.父窗口 2.标题栏 3.显示信息 4.拥有的按钮(QMessageBox类提供的标准按钮)
*/
int ret3 = QMessageBox::warning(this,tr("警告对话框"),tr("不能提前结束!"),QMessageBox::Abort);
if(ret3 == QMessageBox::Abort){
qDebug() << tr("警告!");
}
/*
* 4.错误对话框
* 1.父窗口 2.标题栏 3.显示信息 4.拥有的按钮(QMessageBox类提供的标准按钮)
*/
int ret4 = QMessageBox::critical(this,tr("严重错误对话框"),tr("发现一个严重错误,现在需要关闭所有的文件!"),QMessageBox::YesAll);
if(ret4 == QMessageBox::YesAll){
qDebug() << tr("错误");
}
/*
*5.关于对话框
* 1.父窗口 2.标题栏 3.显示信息
* about()函数没有返回值 默认只有一个按钮
*/
QMessageBox::about(this,tr("关于对话框"),tr("L_taxy@163.com 与您一起学习QT"));
}
以上就是依次显示的页面 , 当然 对应的console也会打印输出:
进度对话框
#include <QProgressDialog> //进度对话框 头文件
/*
* 进度对话框的单击槽
**/
void MainWindow::on_pushButton_6_clicked()
{
QProgressDialog dialog(tr("文件赋值进度"),tr("取消"),0,50000,this);
dialog.setWindowTitle(tr("进度对话框")); //设置窗口标题
dialog.setWindowModality(Qt::WindowModal); //将对话框设置为模态
dialog.show();
for(int i = 0;i<50000;i++){ //演示赋值进度
dialog.setValue(i); //设置进度条当前的值
QCoreApplication::processEvents(); //避免界面冻结
if(dialog.wasCanceled()) break; //按下取消按钮则中断
}
dialog.setValue(50000); //这样才能显示100% 因为for循环中少加了一次
qDebug() << tr("复制结束");
}
控制台打印如下:
向导对话框
先在mainwindow.h 文件:
#include <QWizard>
private:
Ui::MainWindow *ui;
QWizardPage *createPage1(); //新添加 向导页面1
QWizardPage *createPage2(); //新添加 向导页面2
QWizardPage *createPage3(); //新添加 向导页面3
};
mainwindow.cpp文件:
/*
* 向导对话框 单击槽
**/
void MainWindow::on_pushButton_8_clicked()
{
QWizard wizard(this);
wizard.setWindowTitle(tr("向导对话框"));
wizard.addPage(createPage1());
wizard.addPage(createPage2());
wizard.addPage(createPage3());
wizard.exec();
}
/*
* 向导页面1
**/
QWizardPage *MainWindow::createPage1()
{
QWizardPage *page = new QWizardPage;
page->setTitle(tr("介绍"));
return page;
}
/*
* 向导页面2
**/
QWizardPage *MainWindow::createPage2()
{
QWizardPage *page = new QWizardPage;
page->setTitle(tr("用户选择信息"));
return page;
}
/*
* 向导页面3
**/
QWizardPage *MainWindow::createPage3()
{
QWizardPage *page = new QWizardPage;
page->setTitle(tr("结束"));
return page;
}
运行效果如下:
对话框定时关闭
QMessageBox *m_box = new QMessageBox(QMessageBox::Information,tr("Error"),tr("%1 错误").arg(msg));
QTimer::singleShot(1000,m_box,SLOT(accept()));
m_box->exec();