Qt提供的可复用的标准对话框,全部继承自QDialog类,如下图所示:
- QMessageBox:信息对话框,用于显示信息、询问问题等;
- QFileDialog:文件对话框
- QColorDialog:颜色对话框
- QInputDialog:输入对话框(允许用户输入一次数据)
- QFontDialog:字体对话框
- QProgressDialog:进度对话框
- QPrintDialog:打印对话框
- QPrintPreviewDialog:打印预览对话框
- QPageSetupDialog:打印设置对话框,为打印机提供纸张相关的选项
标准对话框使用方式
QDialogType dialog(this); //对话框对象的定义 dialog.setPropertyxxxx(value); //对话框属性设置 if(dialog.exec() == QDialogType::vaule) { Type v = dialog.getDialogValue(); //获取对话框数据 //... ... 处理数据 }
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(ret==QMessageBox::Ok) { qDebug()<<"QMessageBox::Ok"; //当点击Ok按钮,则会打印qDebug } return 0; }
效果:
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 Str=dlg.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);
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;
效果:
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 color=dlg.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(); }
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 ) ;
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 );
QPrintDialog打印机对话框
QPrinter类介绍:
- QPrinter是打印设备及其参数的封装
- QPrinter封装了系统中打印设备的驱动接口
试验:
QPrintDialog printDialog; if (printDialog.exec() == QDialog::Accepted) { QPrinter *printer=printDialog.printer(); //获取Qprinter QTextDocument td; td.setPlainText("TEST TEST TEST"); //设置文本 //printer->setOutputFileName("D:\\1.pdf"); //设置文件路径 td.print(printer); //打印td }
效果: