1. 标准对话框
(1)Qt为开发者提供了一些可复用的对话框类型
(2)Qt提供的可复用对话框全部继承自QDialog类
(3)Qt中的标准对话框遵循相同的使用方式(三板斧)
//1、定义对话框对象(第1板斧) DialogType dlg(this); //2、设置对话框属性(第2板斧) dlg.setPropertyXXX(value); if(dlg.exec() == DialogType::value) //3.打开对话框(第3板斧) { //4、获取对话框数据 Type v = dlg.getDialogValue(); //处理对话框数据 }
2. 消息对话框:QMessageBox
(1)消息对话框是应用程序中最常见的界面元素
(2)消息对话框主要用于:为用户提示重要信息或强制用户进行操作选择
(3)消息对话框的使用方式(见下面实例分析)
(4)消息对话框中的实用静态函数
①QMessageBox::question(…) //创建带有“是/否”按钮的消息框
②QMessageBox::information(…) //创建带有“确定”或“取消”按钮的消息框
③QMessageBox::warning(…) //创建一个警告对话框
④QMessageBox::critical(…) //创建一个严重错误对话框
⑤QMessageBox::about(…) //创建“关于”对话框
3. 文件对话框:QFileDialog
(1)文件对话框常用于以下情况
①Open Mode:打开一个外部文件
②Save Mode:将当前内容存储于指定的外部文件中
(2)文件对话框的使用方式(见下面的实例分析)
(3)文件类型过滤器:setNameFilter(QString&);
格式:显示名(*.后缀1 *.后缀2… *.后缀N),如
"Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml);;All(*.*)"
(4)QFileDialog中实用函数
①QFileDialog::getOpenFileName;
②QFileDialog::getOpenFileNames;
③QFileDialog::getSaveFileName
【编程实验】消息对话框和文件对话框使用实例
//main.cpp
#include <QApplication> #include "Widget.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
//Widget.h
#ifndef _WIDGET_H_ #define _WIDGET_H_ #include <QWidget> #include <QPushButton> class Widget : public QWidget { Q_OBJECT private: QPushButton SimpleMsgBtn; QPushButton CustomMsgBtn; QPushButton OpenFileBtn; QPushButton SaveFileBtn; private slots: void SimpleMsgBtn_Clicked(); void CustomMsgBtn_Clicked(); void OpenFileBtn_Clicked(); void SaveFileBtn_Clicked(); public: Widget(QWidget* parent = 0); ~Widget(); }; #endif //_WIDGET_H_
//Widget.cpp
#include "Widget.h" #include <QMessageBox> #include <QFileDialog> #include <QDebug> Widget::Widget(QWidget* parent):QWidget(parent), SimpleMsgBtn(this),CustomMsgBtn(this),OpenFileBtn(this),SaveFileBtn(this) { SimpleMsgBtn.setText("Simple MessageBox"); SimpleMsgBtn.move(20, 20); SimpleMsgBtn.resize(160, 30); CustomMsgBtn.setText("Custom MessageBox"); CustomMsgBtn.move(20, 70); CustomMsgBtn.resize(160, 30); OpenFileBtn.setText("OpenFile Dialog"); OpenFileBtn.move(20, 120); OpenFileBtn.resize(160, 30); SaveFileBtn.setText("SaveFile Dialog"); SaveFileBtn.move(20, 170); SaveFileBtn.resize(160, 30); resize(200, 200); setFixedSize(200, 220); connect(&SimpleMsgBtn, SIGNAL(clicked()), this, SLOT(SimpleMsgBtn_Clicked())); connect(&CustomMsgBtn, SIGNAL(clicked()), this, SLOT(CustomMsgBtn_Clicked())); connect(&OpenFileBtn, SIGNAL(clicked()), this, SLOT(OpenFileBtn_Clicked())); connect(&SaveFileBtn, SIGNAL(clicked()), this, SLOT(SaveFileBtn_Clicked())); } void Widget::SimpleMsgBtn_Clicked() { QMessageBox msg(this); msg.setText("This is a MessageBox!"); msg.exec(); } void Widget::CustomMsgBtn_Clicked() { QMessageBox msg(this); msg.setWindowTitle("Custom Messagebox"); msg.setText("This is a detail MessageBox"); msg.setIcon(QMessageBox::Information); msg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel | QMessageBox::YesToAll); //information(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton) //int ret = QMessageBox::information(this, "Custom MessageBox", // "This is a detail MessageBox"), // QMessageBox::Ok | QMessageBox::Cancel | QMessageBox::YesToAll); if(msg.exec() == QMessageBox::Ok) { qDebug() << "Ok button is Clicked!"; } } void Widget::OpenFileBtn_Clicked() { QFileDialog dlg(this); dlg.setAcceptMode(QFileDialog::AcceptOpen); //Qt5.5以下用dlg.setFilter dlg.setNameFilter("Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml);;All(*.*)"); dlg.setFileMode(QFileDialog::ExistingFiles); //注意:复数形式,表达打开多个文件 if(dlg.exec() == QFileDialog::Accepted) { QStringList fs = dlg.selectedFiles(); for(int i=0; i<fs.count(); i++) { qDebug() << fs[i]; } } } void Widget::SaveFileBtn_Clicked() { QFileDialog dlg(this); dlg.setAcceptMode(QFileDialog::AcceptSave); dlg.setNameFilter("Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml);;All(*.*)"); if(dlg.exec() == QFileDialog::Accepted) { QStringList fs = dlg.selectedFiles(); for(int i=0; i<fs.count();i++) { qDebug() << fs[i]; } } } Widget::~Widget() { }
4. 小结
(1)Qt中提供了多个可复用的对话框类型,它们都继承于QDialog,同时遵循相同的使用方式
(2)QMessageBox用于提示重要的程序信息
(3)QFileDialog用于获取系统中的文件路径