虽然我们可以使用QDialog类进行自定义对话框的开发,但是Qt为了方便开发,提供了几种可复用的对话框类型,它们都继承自QDialog类。
分别是消息对话框、打开文件对话框、打印对话框、颜色选择对话框、输入对话框和进度条对话框,由于篇幅,将分次学习标准对话框,本次学习消息提示对话框和文件选择对话框。
因为Qt中所有类型的对话框都继承自QDialog类,那么所有的对话框都遵循三板斧:定义对象并设置好父窗口及对话框属性、模态调用exec函数(等待用户处理并防止一闪而过)、根据返回值进行下一步数据处理。
消息对话框是应用程序中常用的界面元素,常用于给用户提供消息提示和强制用户进行某些操作。
根据之前三板斧原则接下来就可以直观的试试消息对话框怎么使用。
QMessageBox msg(this);//对话框设置父组件
msg.setWindowTitle("Window Title");//对话框标题
msg.setText("This is a message dialog!");//对话框提示文本
msg.setIcon(QMessageBox::Information);//设置图标类型
msg.setStandardButtons(QMessageBox::Ok | QMessageBox:: Cancel | QMessageBox::YesToAll);//对话框上包含的按钮
if(msg.exec() == QMessageBox::Ok)//模态调用
{
qDebug() << " Ok is clicked!";//数据处理
}
当按下OK按钮后就会在输出框打印”Ok is clicked!”
除了三板斧的方式使用消息提示对话框以外还可以使用QMessageBox提供的几个静态成员函数得到相同的结果。
QMessageBox::question(this,"question","This is a question Dialog!",QMessageBox::Ok | QMessageBox::Cancel,QMessageBox::Cancel);
QMessageBox::information(this,"information","This is a information Dialog!",QMessageBox::Ok | QMessageBox::Cancel,QMessageBox::Cancel);
QMessageBox::warning(this,"warning","This is a warning Dialog!",QMessageBox::Ok | QMessageBox::Cancel,QMessageBox::Cancel);
QMessageBox::critical(this,"critical","This is a critical Dialog!",QMessageBox::Ok | QMessageBox::Cancel,QMessageBox::Cancel);
QMessageBox::about(this,"about","This is a about Dialog!");
五个类型分别表示提问型、提示型、警告型、错误型和相关型。
文件对话框常用于打开文件和保存文件
使用文件对话框依旧是三板斧原则:定义对话框对象后设置父组件及对话框属性、模态调用exec()、根据返回结果执行后面的流程。
常规的使用文件对话框的方式如下:
QFileDialog dlg(this);
dlg.setDirectory("G:/D.T.Qt/Notes");//设置默认目录
dlg.setAcceptMode(QFileDialog::AcceptOpen);//允许打开文件
dlg.setFileMode(QFileDialog::ExistingFile );//选择单个文件
dlg.setFilter("Image(*.jpg *.xmp *.bmp);;Text(*.txt)");
if(dlg.exec() == QFileDialog::Accepted)
{
QStringList fs = dlg.selectedFiles();
for(int i = 0; i < fs.count(); i++)
{
qDebug() << fs[i];
}
}
String getExistingDirectory ( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), Options options = ShowDirsOnly )
QString getOpenFileName ( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0 )
QStringList getOpenFileNames ( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0 )
QString getSaveFileName ( QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0 )
例如:
QFileDialog::getOpenFileName(this,"GetFileName Dialog","G:/D.T.Qt/Notes","Text(*.txt)" );