目录
1、标准对话框
2、QMessageBox和QFileDialog
1、消息对话框
2、文件对话框
3、编程实验
3、QColorDialog和QInputDialog
1、颜色对话框
2、输入对话框
3、编程实验
4、QFontDialog、QProgressDialog和QPrintDialog
1、字体对话框
2、进度对话框
3、打印对话框
4、编程实验
5、小结
Qt为开发者提供了一些可复用的对话框类型
Qt提供的可复用对话框全部继承自QDialog类
Qt中的标准对话框遵循相同的使用方式
消息对话框是应用程序中最常见的界面元素
消息对话框主要用于:
-为用户提示重要信息
-强制用户进行操作选择
消息对话框的使用方式
QMessageBox中的实用函数 (具体用法请自查qt帮助文档)
void about ( QWidget * parent, const QString & title, const QString & text );
StandardButton critical ( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton );
StandardButton information ( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton );
StandardButton question ( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton );
StandardButton warning ( QWidget * parent, const QString & title, const QString & text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton );
文件对话框常用于以下情形
- Open Mode (打开模式)
应用程序中需要用户打开一个外部的文件
- Save Mode (保存模式)
应用程序中需要将当前内容存储于用户指定的外部文件中
文件对话框的使用方式
文件类型过滤器
-在文件对话框中可以通过文件后缀定义过滤器
-过滤器定义规则: 显示名(*. 后缀1 *. 后缀2…*. 后缀N)
例如:
QFileDialog中的实用函数
QString QFileDialog::getExistingDirectory();
QString QFileDialog::getOpenFileName();
QStringList QFileDialog::getOpenFileNames();
QString QFileDialog::getSaveFileName();
消息、文件对话框使用实例 19-1.pro
Widget.h
#ifndef _WIDGET_H_
#define _WIDGET_H_
#include
#include
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.cpp
#include "Widget.h"
#include
#include
#include
Widget::Widget(QWidget *parent) : QWidget(parent),
SimpleMsgBtn(this), CustomMsgBtn(this), OpenFileBtn(this), SaveFileBtn(this)
{
SimpleMsgBtn.setText("Simple Message Dialog");
SimpleMsgBtn.move(90, 50);
SimpleMsgBtn.resize(200, 30);
CustomMsgBtn.setText("Custom Message Dialog");
CustomMsgBtn.move(90, 100);
CustomMsgBtn.resize(200, 30);
OpenFileBtn.setText("Open File Dialog");
OpenFileBtn.move(90, 150);
OpenFileBtn.resize(200, 30);
SaveFileBtn.setText("Save File Dialog");
SaveFileBtn.move(90, 200);
SaveFileBtn.resize(200, 30);
// resize(200, 220);
setFixedSize(400, 320);
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 message dialog!");
msg.exec();
}
void Widget::CustomMsgBtn_Clicked()
{
QMessageBox msg(this);
msg.setWindowTitle("Window Title");
msg.setText("This is a detail message dialog!");
msg.setIcon(QMessageBox::Information);
msg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel | QMessageBox::YesToAll); // 前面这些步骤都可用QMessageBox::information()直接代替
if( msg.exec() == QMessageBox::Ok )
{
qDebug() << "Ok button is clicked!";
}
}
void Widget::OpenFileBtn_Clicked()
{
QFileDialog dlg(this);
dlg.setAcceptMode(QFileDialog::AcceptOpen);
dlg.setFilter("Text(*.txt)");
dlg.setFileMode(QFileDialog::ExistingFiles);
if( dlg.exec() == QFileDialog::Accepted )
{
QStringList fs = dlg.selectedFiles();
for(int i=0; i
main.cpp
#include
#include "Widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
Qt中提供了预定义的颜色对话框QColorDialog类
QColorDialog类用于提供指定颜色的对话框部件
颜色对话框的使用方式
Qt中的QColor类用来在程序中表示颜色的概念
QColor类同时支持多种颜色表示方式
- RGB: 以红,绿,蓝为基准的三色模型
- HSV: 以色调,饱和度,明度为基准的六角锥体模型
- CMYK: 以天蓝,品红,黄色,黑为基准的全彩印刷色彩模型
QColorDialog中的实用函数
QColor getColor ( const QColor & initial, QWidget * parent, const QString & title, ColorDialogOptions options = 0 );
QColor getColor ( const QColor & initial = Qt::white, QWidget * parent = 0 );
Qt中提供了预定义的输入对话框QlnputDialog类
QlnputDialog类用于需要临时进行数据输入的场合
输入对话框的使用方式
输入对话框的输入模式
QinputDialog::TextInput -输入文本字符串
QinputDialog::IntInput -输入整形数
QinputDialog::DoubleInput - 输入浮点数
QlnputDialog中的实用函数
double QinputDialog::getDouble();
int QinputDialog::getInt();
QString QinputDialog::getItem();
QString QinputDialog::getText();
颜色、输入对话框使用实例 20-1.pro
Widget.h
#ifndef _WIDGET_H_
#define _WIDGET_H_
#include
#include
class Widget : public QWidget
{
Q_OBJECT
private:
QPushButton ColorDialogBtn;
QPushButton InputDialogBtn;
private slots:
void ColorDialogBtn_Clicked();
void InputDialogBtn_Clicked();
public:
Widget(QWidget *parent = 0);
~Widget();
};
#endif
Widget.cpp
#include "Widget.h"
#include
#include
#include
Widget::Widget(QWidget *parent) : QWidget(parent),
ColorDialogBtn(this), InputDialogBtn(this)
{
ColorDialogBtn.setText("Color Dialog");
ColorDialogBtn.move(20, 20);
ColorDialogBtn.resize(160, 30);
InputDialogBtn.setText("Input Dialog");
InputDialogBtn.move(20, 70);
InputDialogBtn.resize(160, 30);
resize(200, 120);
setFixedSize(200, 120);
connect(&ColorDialogBtn, SIGNAL(clicked()), this, SLOT(ColorDialogBtn_Clicked()));
connect(&InputDialogBtn, SIGNAL(clicked()), this, SLOT(InputDialogBtn_Clicked()));
}
void Widget::ColorDialogBtn_Clicked()
{
QColorDialog dlg(this);
dlg.setWindowTitle("Color Editor");
dlg.setCurrentColor(QColor(100, 111, 222)); //自定义 可以直接dlg.setCurrentColor(QColor::blue);
if( dlg.exec() == QColorDialog::Accepted )
{
QColor color = dlg.selectedColor();
qDebug() << color;
qDebug() << color.red();
qDebug() << color.green();
qDebug() << color.blue();
qDebug() << color.hue();
qDebug() << color.saturation();
qDebug() << color.value();
}
}
void Widget::InputDialogBtn_Clicked()
{
QInputDialog dlg(this);
dlg.setWindowTitle("Input Test");
dlg.setLabelText("Please input an integer:");
dlg.setInputMode(QInputDialog::TextInput);
if( dlg.exec() == QInputDialog::Accepted )
{
qDebug() << dlg.textValue();
}
}
Widget::~Widget()
{
}
main.cpp
#include
#include "Widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
Qt中提供了预定义的字体对话框QFontDialog类
QFontDialog类用于提供选择字体的对话框部件
字体对话框的使用方式
QFontDialog中的实用函数
- QFontDialog: : getFont
Qt中提供了预定义的进度对话框QProgressDialog类
QProgressDialog类用于显示进度信息
QProgressDialog类用于需要用户等待的场合
进度对话框的使用方式
Qt中提供了预定义的打印对话框QPrintDialog类
QPrintDialog类用于设置打印相关的参数信息
打印对话框的使用方式
Qt中的QPrinter类是打印设备及其参数的封装
QPrinter类封装了系统中打印设备的驱动接口
QPrinter以相同方式使用系统中的不同打印设备
字体、进度、打印对话框使用实例 21-1.pro
Widget.h
#ifndef _WIDGET_H_
#define _WIDGET_H_
#include
#include
class Widget : public QWidget
{
Q_OBJECT
private:
QPushButton FontDialogBtn;
QPushButton ProgressDialogBtn;
QPushButton PrintDialogBtn;
private slots:
void FontDialogBtn_Clicked();
void PrintDialogBtn_Clicked();
void ProgressDialogBtn_Clicked();
public:
Widget(QWidget *parent = 0);
~Widget();
};
#endif
Widget.cpp
#include "Widget.h"
#include
#include
#include
#include
#include
#include
Widget::Widget(QWidget *parent) : QWidget(parent),
FontDialogBtn(this), ProgressDialogBtn(this), PrintDialogBtn(this)
{
FontDialogBtn.setText("Font Dialog");
FontDialogBtn.move(20, 20);
FontDialogBtn.resize(160, 30);
ProgressDialogBtn.setText("Progress Dialog");
ProgressDialogBtn.move(20, 70);
ProgressDialogBtn.resize(160, 30);
PrintDialogBtn.setText("Print Dialog");
PrintDialogBtn.move(20, 120);
PrintDialogBtn.resize(160, 30);
resize(200, 170);
setFixedSize(200, 170);
connect(&FontDialogBtn, SIGNAL(clicked()), this, SLOT(FontDialogBtn_Clicked()));
connect(&ProgressDialogBtn, SIGNAL(clicked()), this, SLOT(ProgressDialogBtn_Clicked()));
connect(&PrintDialogBtn, SIGNAL(clicked()), this, SLOT(PrintDialogBtn_Clicked()));
}
void Widget::FontDialogBtn_Clicked()
{
QFontDialog dlg(this);
dlg.setWindowTitle("Font Dialog Test");
dlg.setCurrentFont(QFont("Courier New", 10, QFont::Bold));
if( dlg.exec() == QFontDialog::Accepted )
{
qDebug() << dlg.selectedFont();
}
}
void Widget::ProgressDialogBtn_Clicked()
{
QProgressDialog dlg(this);
dlg.setWindowTitle("Updating...");
dlg.setLabelText("Downloading update from server...");
dlg.setMinimum(0);
dlg.setMaximum(100);
dlg.setValue(35);
// create a new thread
dlg.exec();
}
void Widget::PrintDialogBtn_Clicked()
{
QPrintDialog dlg(this);
dlg.setWindowTitle("Print Dialog Test");
if( dlg.exec() == QPrintDialog::Accepted )
{
QPrinter* p = dlg.printer(); // 得到QPrinter对象
QTextDocument td;
//td.setPlainText("Printer object test!");
td.setHtml("Print html object test");
p->setOutputFileName("D:\\test.xps"); // 使用虚拟打印设备
td.print(p); // 打印到QPrint对象(封装了打印设备和参数)
}
}
Widget::~Widget()
{
}
main.cpp
#include
#include "Widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
Qt中提供了多个可复用的对话框类型
-继承于QDialog类型
-遵循相同的使用方式
QMessageBox用于提示重要的程序信息
QFileDialog用于获取系统中的文件路径
QColorDialog类用于提供指定颜色的对话框部件
QColor类用来在程序中表示颜色的概念
QlnputDialog类用于需要临时进行数据输入的场合
Qt中标准对话框的设计模式
- GUI界面部件产生数据对象
-业务逻辑中的其它对象使用数据对象
- GUI界面与业务逻辑通过数据对象连接