Qt学习09——基本标准对话框
来源:互联网 发布:python应用领域 编辑:程序博客网 时间:2024/05/20 04:14
一、概述
本文用一个例子讲述Qt几种基本对话框的使用,包括QDialog、QFileDialog、QColorDialog、QFontDialog、QInputDialog、QMessageBox这几种。中间还会讲到如何实现ui的互相调用、中文显示问题等。
源码下载:
Qt基本对话框
二、功能描述
先来看一下我们要实现哪些功能:
1、在主对话框中包含 QFileDialog、QColorDialog、QFontDialog、QInputDialog、QMessageBox 五种对话框的启动按钮。
2、点击“标准文件对话框”,弹出QFileDialog,右侧的QLineEdit中显示文件名;
3、点击“标准颜色对话框”,弹出QColorDialog,右侧QFrame中显示选择的颜色;
4、点击“标准字体对话框”,弹出QFontDialog,右侧文字改变字体;
5、点击“标准输入对话框”,弹出新的QDialog,在子对话框中点击“修改”弹出QInputDialog,可以输入和更改信息;
6、点击“标准信息对话框”,弹出新的QDialog,在自对话框中点击不同的消息对话框弹出不同种类的QMessageBox。
三、功能实现
本例依然采用ui+code的方法来实现上述功能。
根据上面的功能说明,除了主Dialog外,还需添加input和message的2个额外二级子对话框供主对话框调用。
工程目录如下:
1、标准文件对话框
右键按钮,添加槽函数
void basedialog::on_fileButton_clicked(){ QString filename = QFileDialog::getOpenFileName(this,QString::fromLocal8Bit("打开文件"),"C:/"); ui->filelineEdit->setText(filename);}这里我们只是通过getOpenFileName()函数获取文件名,F2查到其函数原型为:
static QString getOpenFileName(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = Q_NULLPTR, Options options = Options());F1查询使用文档有用法示例:
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "/home", tr("Images (*.png *.xpm *.jpg)"));
关于中文显示的问题:
这里说明一下,由于我的Qt使用了VS2015作为编译器,VS2015内部编码根据使用区域默认为GBK,而Qt默认采用UTF-8编码,因此在Qt Creator的代码中的中文显示胡出现乱码,而.ui文件使用XML,因此在.ui中编辑的中文均能正常显示。修改中文乱码的方法网上有很多,但我测试后最快捷有效的是这个方法:Qt技巧——中文显示乱码问题。
2、标准颜色对话框
同样,直接添加槽函数:
void basedialog::on_colorButton_clicked(){ QColor color = QColorDialog::getColor(Qt::yellow,this,QString::fromLocal8Bit("选择颜色"),QColorDialog::ShowAlphaChannel); ui->colorframe->setPalette(QPalette(color)); ui->colorframe->setAutoFillBackground(true);}这里显示颜色用的是QFrame,QFrame是widget的一个基类,可以方便地改变外形,这里用它来获取颜色接收参数并将背景色更改为对应颜色。
3、标准字体对话框
用法与上面相同,查询文档和函数原型便可知道用法。
void basedialog::on_fontButton_clicked(){ bool ok; QFont font = QFontDialog::getFont(&ok,QFont("Arial",12),this,QString::fromLocal8Bit("字体")); if(ok) ui->fontlineEdit->setFont(font);}
4、标准输入对话框
这里需要在当前的对话框调用另一个对话框。方法可以参考前面的:Qt技巧——多窗口调用
进入子对话框inputdialog后,我们可以尝试进行多种类型的输入操作:
字符串、字符串多选列表、整数、double浮点数。以字符串输入为例,先新建一个输入对话框的实例,用getText()方法获取输入框的字符串,传给变量newname,并用label显示newname。
void InputDialog::on_nameButton_clicked(){ bool ok; nameInputDialog = new QInputDialog; QString newname = nameInputDialog->getText(this, QString::fromLocal8Bit("修改姓名"), QString::fromLocal8Bit("名姓:"), QLineEdit::Normal, ui->namelabel2->text(), &ok); if(ok && !newname.isEmpty()){ ui->namelabel2->setText(newname); }}至于getText()各参数的含义,可以F1查询文档,官方给出了详细用法说明和示例。
其他输入的操作类似,只需重载数据获取的方法即可:
void InputDialog::on_nameButton_clicked(){ bool ok; nameInputDialog = new QInputDialog; QString newname = nameInputDialog->getText(this, QString::fromLocal8Bit("修改姓名"), QString::fromLocal8Bit("名姓:"), QLineEdit::Normal, ui->namelabel2->text(), &ok); if(ok && !newname.isEmpty()){ ui->namelabel2->setText(newname); }}void InputDialog::on_sexButton_clicked(){ bool ok; QStringList SexItems; SexItems<<QString::fromLocal8Bit("男")<<QString::fromLocal8Bit("女"); sexInputDialog = new QInputDialog; QString SexItem = sexInputDialog->getItem(this, QString::fromLocal8Bit("修改性别"), QString::fromLocal8Bit("性别:"), SexItems,0,false, &ok); if(ok && !SexItem.isEmpty()){ ui->sexlabel2->setText(SexItem); }}void InputDialog::on_ageButton_clicked(){ bool ok; ageInputDialog = new QInputDialog; int newage = ageInputDialog->getInt(this, QString::fromLocal8Bit("修改年龄"), QString::fromLocal8Bit("年龄:"), 22,-2147483647,2147483647,1, &ok); if(ok){ ui->agelabel2->setText(QString("%1").arg(newage)); }}void InputDialog::on_scoreButton_clicked(){ bool ok; scoreInputDialog = new QInputDialog; double newscore = scoreInputDialog->getDouble(this, QString::fromLocal8Bit("修改分数"), QString::fromLocal8Bit("分数:"), 0,-2147483647,2147483647,1, &ok); if(ok){ ui->scorelabel2->setText(QString("%1").arg(newscore)); }}
5、标准消息对话框
与标准输入对话框一样,需要新建一个子对话框。在标准消息对话框中,我们给出了5种对话框示例:question、information、warning、critical、about。
以question为例,我们调用了QMessageBox::question(),函数原型为:
StandardButton QMessageBox::question(QWidget *parent,
const QString &title,
const QString &text,
StandardButtons buttons = StandardButtons( Yes | No ),
StandardButton defaultButton = NoButton)最后两项分别设置对话框中的按钮及默认已选按钮,我这里只给了Ok和Cancel两个按钮,默认选择Ok。然后用一个Switch分别对Ok和Cancel进行处理。我这里是将其与一个Label绑定,点击不同按钮显示不同字符串。
void MsgDialog::on_qstMsgButton_clicked(){ QMessageBox::StandardButton msgindex = QMessageBox::question(this, QString::fromLocal8Bit("询问"), QString::fromLocal8Bit("修改完成,是否继续?"), QMessageBox::Ok|QMessageBox::Cancel, QMessageBox::Ok); switch (msgindex) { case QMessageBox::Ok: ui->msgLabel->setText("question msg:ok"); break; case QMessageBox::Cancel: ui->msgLabel->setText("question msg:cancel"); break; default: break; }}
同样的,我们用类似方法设置其他对话框:
四、总结
Qt中基本标准对话框的使用相对来说还是很简便的,大量现成的类和方法都可以直接拿来用,并且帮助文档中已经给了详细的说明和用例。最后上一张整体的图吧:
- Qt学习09——基本标准对话框
- QT学习 第一章:基本对话框--使用标准输入框
- QT学习 第一章:基本对话框--使用标准输入框
- QT学习——实例1:标准对话框
- 我的Qt学习之路——标准对话框
- 学习记录-Qt标准对话框
- Qt学习——基本对话框Q*Dialog类
- Qt学习——基本对话框Q*Dialog类 .
- Qt学习——基本对话框Q*Dialog类
- Qt学习笔记01_标准对话框
- QT学习 之 对话框 (三) 标准颜色对话框
- QT学习 第一章:基本对话框--基本对话框使用
- Qt 之路 (15)—标准对话框之QFileDialog
- Qt 之路 (16)—标准对话框之QColorDialog
- Qt 之路 (17)—标准对话框之QMessageBox
- Qt 之路 (18)—标准对话框之QInputDialog
- Qt学习之路(15): Qt标准对话框之QFileDialog
- Qt学习之路(16): Qt标准对话框之QColorDialog
- jdbc数据库
- Linux命令行访问网页
- 有序表归并算法
- HashSet和TreeSet的分析
- Rviz教程(一):用户指南
- Qt学习09——基本标准对话框
- PHP第一次采集小记
- C#添加引用后提示还是无法找到类型或命名空间
- caffe 学习笔记之Makefile.config注释
- Windows 7便签程序
- Windows 10下mysql 64位 安装(mysql-5.7.11-winx64安装)
- 全栈开发——动手打造属于自己的直播间(Vue+SpringBoot+Nginx)
- python-期货指数的单位根检验
- reverse shell dll 源码