9.QT-标准对话框

发布时间:2026/8/1 19:17:27
9.QT-标准对话框 1.Qt提供的可复用的标准对话框,全部继承自QDialog类,如下图所示:QMessageBox信息对话框用于显示信息、询问问题等QFileDialog文件对话框QColorDialog颜色对话框QInputDialog输入对话框(允许用户输入一次数据)QFontDialog字体对话框QProgressDialog进度对话框QPrintDialog打印对话框QPrintPreviewDialog打印预览对话框QPageSetupDialog打印设置对话框,为打印机提供纸张相关的选项2.标准对话框使用方式QDialogType dialog(this); //对话框对象的定义 dialog.setPropertyxxxx(value); //对话框属性设置 if(dialog.exec() QDialogType::vaule) { Type v dialog.getDialogValue(); //获取对话框数据 //... ... 处理数据 }3.QMessageBox消息对话框代码如下:#include QtGui/QApplication #include QDebug #include QMessageBox int main(int argc, char *argv[]) { QApplication a(argc, argv); QMessageBox msg; msg.setWindowTitle(Message); msg.setText(This is Message content!); msg.setIcon(QMessageBox::Information); //选择图标为:信息类型 msg.setStandardButtons(QMessageBox::Ok|QMessageBox::Cancel); msg.setButtonText(QMessageBox::Ok,QString(确定)); msg.setButtonText(QMessageBox::Cancel,QString(取消)); if(msg.exec()QMessageBox::Ok) { qDebug()QMessageBox::Ok; //当点击确定按钮,则会打印信息 } return 0; }效果:也可以使用一个静态函数来创建消息对话框:StandardButton QMessageBox::information(QWidget * parent, const QString title, const QString text, StandardButtons buttons Ok, StandardButtondefaultButton NoButton); //显示信息对话框, 将显示一个反叹号图标 StandardButton QMessageBox::question(QWidget * parent, const QString title, const QString text, StandardButtons buttons Ok, StandardButtondefaultButton NoButton); //显示问题对话框, 将显示一个问号图标 StandardButton QMessageBox::warning(QWidget * parent, const QString title, const QString text, StandardButtons buttons Ok, StandardButtondefaultButton NoButton); //显示警告对话框, 将显示一个黄色叹号图标 StandardButton QMessageBox::critical(QWidget * parent, const QString title, const QString text, StandardButtons buttons Ok, StandardButton defaultButton NoButton); //显示严重错误对话框, 将显示一个红色的错误符号 void QMessageBox::about(QWidget * parent, const QString title, const QString text); //显示关于对话框,该对话框只有一个OK按钮比如:#include QtGui/QApplication #include QDebug #include QMessageBox int main(int argc, char *argv[]) { QApplication a(argc, argv); QMessageBox msg; int ret msg.question(NULL,Question,This is Message Question,QMessageBox::Ok|QMessageBox::Cancel); if(retQMessageBox::Ok) { qDebug()QMessageBox::Ok; //当点击Ok按钮,则会打印qDebug } return 0; }效果:还有一种3按钮对话框如下所示:示例如下所示:int ret QMessageBox::question(NULL,数据导出,是否同时导出其他所有页面数据?,全部导出,仅参数,取消, 1, 2); // 1表示默认按钮焦点在仅参数上, 2: 表示显示退出按钮,并且退出按钮点击后返回2(如果返回0则表示全部导出返回1表示仅参数返回2表示取消)效果如下所示:4.QFileDialog文件对话框QFileDialog的exec()返回值为QFileDialog::Accepted或者QFileDialog::Rejected需要以下成员函数:setAcceptMode (QFileDialog::AcceptOpen); //设置文本对话框是用来打开文件(AcceptOpen),还是用来保存文件(AcceptSave) setDirectory (const QString directory ); //设置文本对话框路径 setFileMode ( FileMode mode ); //设置文本对话框打开的文件模式,是单个文件?还是多个文件还是包括目录 void selectFile(const QString filename); //预设置文件对话框默认打开的文件名 QStringList QFileDialog::selectedFiles(); //用来获取用户选择的多个 文件信息 位置(绝对路径),比如:C:/Users/Administrator/Desktop/新建文本文档.txt QString selectedFilter(); //获取用户选择的文件过滤器文件类型过滤器通过setFilter()成员函数实现,文件过滤器定义规则如下显示名(*.后缀名1 *.后缀名2 ...*.后缀名n)如果,有多个规则,则可以通过;;来隔开,例如:setFilter(Image(*.jpg *.png *.bmp);;Text(*.txt);;All(*.*));以打开文件为例:QFileDialog dlg; dlg.setAcceptMode(QFileDialog::AcceptOpen); dlg.setFileMode(QFileDialog::ExistingFile); //模式为:已存在的文件,如果为保存文件,则不需要指定模式 dlg.setFilter(Image(*.jpg *.png *.bmp);;Text(*.txt);;All(*.*)); dlg.setDirectory(D:); dlg.selectFile(新建文件.txt); if(dlg.exec() QFileDialog::Accepted) { QString Strdlg.selectedFiles()[0]; //获取用户选择的文件 QString filter dlg.selectedFilter(); //获取用户选择的过滤器 qDebug()Str; qDebug()filter; }也可以使用一个静态函数直接打开文件,或者保存文件:QString QFileDialog::getOpenFileName ( QWidget * parent 0, //父组件 const QString caption QString(), //标题 const QString dir QString(), //设置路径, .表示当前路径, /表示更目录 const QString filter QString(), //过滤器 QString * selectedFilter 0, //用户选择文件后的过滤器信息 Options options 0 ); //参数,它的取值为enum QFileDialog::Option ,比如: QFileDialog::ShowDirsOnly (只显示目录) QString getSaveFileName( QWidget *parent 0, const QString caption QString(), const QString dir QString(), const QString filter QString(), QString *selectedFilter 0, Options options 0);5.QInputDialog输入对话框QInputDialog的exec()返回值为QFileDialog::Accepted或者QFileDialog::Rejected常用函数:setLabelText ( const QString text ); //设置对话框标签 setOkButtonText ( const QString text ); //设置OK按钮文本 setCancelButtonText ( const QString text ) //设置Cancel按钮文本 setInputMode ( InputMode mode); //设置输入模式,是文本,还是整数,还是浮点数 setIntRange( int min, int max ); //如果是整数模式,则该函数可以设置允许整数范围 setDoubleRange ( double min, double max ); //如果是浮点数模式,则该函数可以设置允许浮点数范围 QString textValue (); //返回文本模式的输入对话框返回值 int intValue (); //返回整数模式的输入对话框返回值 double doubleValue (); //返回浮点数模式的输入对话框返回值示例:QInputDialog log; log.setInputMode(QInputDialog::TextInput); log.setCancelButtonText(取消); log.setOkButtonText(确定); log.setWindowTitle(输入ID); log.setLabelText(请输入ID); if(log.exec() QInputDialog::Accepted) { qDebug()log.textValue(); }效果:也可以使用一个静态函数实现输入对话框:设置文本输入对话框:QString QInputDialog::getText( QWidget * parent, //父组件 const QString title, //窗口标题 const QString label, //标签提示 QLineEdit::EchoMode mode QLineEdit::Normal, //输入框模式 constQString text QString(), //预定义的文本 bool * ok 0, //如果用户点击ok,则ok true Qt::WindowFlags flags 0 );设置列表输入对话框:QString QInputDialog::getItem ( QWidget * parent, //父组件 const QString title, //窗口标题 const QString label, //标签提示 const QStringList items, //字符串链表,用来显示列表 int current 0, //预定义,表示列表中第哪组 bool editable true, //true表示列表可编译 bool * ok 0, //如果用户点击ok,则ok true Qt::WindowFlags flags 0 )除此之外还有:getDouble()getInt();以getItem()为例:QStringList items; items Spring Summer Fall Winter; bool ok; QString item QInputDialog::getItem(0, QInputDialog::getItem(),Season:, items, 0, false, ok); if (ok !item.isEmpty()) qDebug()item;效果:6.QColorDialog颜色对话框QColorDialog的exec()返回值为QFileDialog::Accepted或者QFileDialog::Rejected需要用到以下函数:void setCurrentColor(const QColor color ) //设置打开后的颜色对话框预定颜色 //它的取值可以为enum Qt::GlobalColor, 比如白色Qt::white //也可以为QColor类, 比如QColor(100,100,100),表示RGB(100,100,100) QColor selectedColor(); //返回用户选择的哪个颜色,如果用户点击了退出,则返回的QColor::isValid()为false bool QColor::isValid(); //颜色有效返回true,无效则返回false示例:QColorDialog dlg; dlg.setCurrentColor(Qt::white); //预定义白色 dlg.exec(); QColor colordlg.selectedColor(); if(color.isValid()) //如果用户选择了颜色 { qDebug()color.red(); qDebug()color.green(); qDebug()color.blue(); }也可以使用一个静态函数直接打开颜色对话框:static QColor getColor( const QColor initial Qt::white, //预定义颜色 QWidget *parent 0); //父组件示例:QColor color QColorDialog::getColor(Qt::white); if(color.isValid()) //如果用户选择了颜色 { qDebug()color.red(); qDebug()color.green(); qDebug()color.blue(); }7.QFontDialog字体对话框QColorDialog的exec()返回值为QFileDialog::Accepted或者QFileDialog::Rejected需要用到以下函数:void setCurrentFont ( const QFont font ) //设置打开后的字体对话框预定字体 //以Courier New字体为例,则参数填为font(Courier New,10,QFont::Bold,true); //表示字体大小为10,加粗,斜体 QFont QFontDialog::selectedFont (); //返回用户选择的字体示例:int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget w; w.setFixedSize(360,300); QLabel label(This is QLabel!,w); w.show(); QFontDialog dlg(w); dlg.setFont(label.font()); if(dlg.exec()QFontDialog::Accepted) { label.setFont(dlg.selectedFont()); label.adjustSize(); } return a.exec(); }选择前-效果:选择后-效果:也可以使用一个静态函数直接打开字体对话框:QFont QFontDialog::getFont( bool * ok, const QFont initial, QWidget * parent, const QString title,FontDialogOptions options ) ;8. QProgressDialog进度条对话框常用函数:setMinimum(int minimum); //设置进度条最小值 setMaximum(int maximum); //设置进度条最大值 setValue(int value); //设置当前进度值 setAutoClose(bool close); //设置自动关闭,如果进度值最大值时,则会自动关闭对话框 setLabelText(const QString text); //设置标签提示 setCancelButtonText(const QString text); //设置Cancel按钮提示 setCancelButton(QPushButton *button); //从新自定义按钮框架,如果添NULL,则表示隐藏按钮 setBar( QProgressBar * bar ); //从新自定义进度条框架 setLabel ( QLabel * label ); //从新自定义标签示例:QProgressDialog dlg; dlg.setMinimum(0); dlg.setMaximum(1000); dlg.setValue(520); dlg.setWindowTitle(Update); dlg.setLabelText(Update... ...); dlg.setCancelButtonText(取消); dlg.exec();效果:也可以直接通过构造函数设置:QProgressDialog ( const QString labelText, const QString cancelButtonText, int minimum, int maximum, QWidget * parent 0, Qt::WindowFlags f 0 );9.QPrintDialog打印机对话框QPrinter类介绍:QPrinter是打印设备及其参数的封装QPrinter封装了系统中打印设备的驱动接口试验:QPrintDialog printDialog; if (printDialog.exec() QDialog::Accepted) { QPrinter *printerprintDialog.printer(); //获取Qprinter QTextDocument td; td.setPlainText(TEST TEST TEST); //设置文本 //printer-setOutputFileName(D:\\1.pdf); //设置文件路径 td.print(printer); //打印td }效果:​​​​​​​PDF具体实现可以参考: ​​​​​​​53.Qt-QPdfWriter绘制PDF,支持表单输出_诺谦的博客-CSDN博客​​​​​​​Qml / Qt / C技术交流群加 779866667 (本专栏文章相关源码免费,入群获取,并且不定时上传资源和文章源码)