Qt对话框及类型
1.对话框的概念对话框是与用户进行简短交互的顶层窗口QDialog是Qt中所有对话框窗口的基类QDialog继承于QWidget是一种容器类型的组件QDialog的意义:QDialog作为一种专用的交互窗口而存在QDialog不能作为子部件嵌入其他容器中QDialog是定制了窗口式样的特殊的QWidget编程实验:QDialog和QWidget的区别int main(int argc, char
1.对话框的概念
对话框是与用户进行简短交互的顶层窗口
QDialog是Qt中所有对话框窗口的基类
QDialog继承于QWidget是一种容器类型的组件
QDialog的意义:
QDialog作为一种专用的交互窗口而存在
QDialog不能作为子部件嵌入其他容器中
QDialog是定制了窗口式样的特殊的QWidget
编程实验:QDialog和QWidget的区别
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
QDialog dialog(&w);
QDialog dialog;
QWidget w(&dialog);
dialog.show();
dialog.setWindowTitle("I am dialog");
w.show();
w.setWindowTitle("I am widget");
return a.exec();
}
2.对话框的类型
模态对话框(QDialog::exec()):
显示后无法与父窗口进行交互
是一种阻塞式的对话框调用方式
非模态对话框(QDialog::show()):
显示后独立存在可以同时与父窗口进行交互
是一种非阻塞式的对话框调用方式
一般情况下:
模态对话框用于必须依赖用户选择的场合(80%):消息提示,文件选择,打印设置等
非模态对话框用于特殊功能设置的场合(20%):查找操作,属性设置等
小技巧:
在栈上创建模式对话框是最简单常用的方式
一般情况下非模态对话框需要在堆上创建
通过QDialog::setModal函数可以创建混合特性的对话框
非模态对话框需要指定Qt::WA_DelateOnClose属性
对话框的返回值:
只有模态对话框才有返回值的概念
模态对话框的返回值用于表示交互结果
QDialog::exec()的返回值为交互结果
void QDialog::done(int i)关闭对话框并将参数作为交互结果
QDialog::Accepted 用户操作成功
QDialog::Rejected 用户操作失败
编程实验:不同特性的对话框以及对话框的返回值
Dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QtGui/QDialog>
#include <QPushButton>
class Dialog : public QDialog
{
Q_OBJECT
protected:
QPushButton ModalBtn;
QPushButton NormalBtn;
QPushButton MixedBtn;
protected slots:
void ModalBtn_Clicked();
void NormalBtn_Clicked();
void MixedBtn_Clicked();
public:
Dialog(QWidget *parent = 0);
~Dialog();
};
#endif // DIALOG_H
Dialog.c
#include "Dialog.h"
#include <QDebug>
Dialog::Dialog(QWidget *parent) :
QDialog(parent), ModalBtn(this), NormalBtn(this), MixedBtn(this)
{
ModalBtn.setText("Modal Dialog");
ModalBtn.move(20, 20);
ModalBtn.resize(100, 30);
NormalBtn.setText("Normal Dialog");
NormalBtn.move(20, 70);
NormalBtn.resize(100, 30);
MixedBtn.setText("Mixed Dialog");
MixedBtn.move(20, 120);
MixedBtn.resize(100, 30);
connect(&ModalBtn, SIGNAL(clicked()), this, SLOT(ModalBtn_Clicked()));
connect(&NormalBtn, SIGNAL(clicked()), this, SLOT(NormalBtn_Clicked()));
connect(&MixedBtn, SIGNAL(clicked()), this, SLOT(MixedBtn_Clicked()));
resize(140, 170);
}
void Dialog::ModalBtn_Clicked()
{
qDebug() << "ModalBtn_Clicked() Begin";
QDialog dialog(this);
dialog.exec();
// done(Accepted);
qDebug() << "ModalBtn_Clicked() End";
}
void Dialog::NormalBtn_Clicked()
{
qDebug() << "NormalBtn_Clicked() Begin";
QDialog* dialog = new QDialog(this);
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->show();
// done(Rejected);
qDebug() << "NormalBtn_Clicked() End";
}
void Dialog::MixedBtn_Clicked()
{
qDebug() << "MixedBtn_Clicked() Begin";
QDialog* dialog = new QDialog(this);
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->setModal(true);
dialog->show();
// done(100);
qDebug() << "MixedBtn_Clicked() End";
}
Dialog::~Dialog()
{
qDebug() << "~Dialog()";
}
main.c
#include <QtGui/QApplication>
#include <QWidget>
#include <QDialog>
#include <QDebug>
#include "Dialog.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog dlg;
int r = dlg.exec();
if( r == QDialog::Accepted )
{
qDebug() << "Accepted";
}
else if( r == QDialog::Rejected )
{
qDebug() << "Rejected";
}
else
{
qDebug() << r;
}
return r;
//return a.exec(); //进入消息循环,进入两次消息循环,如果以模态对话框作为程序运行主窗口,不要调用a.exec();
}
2.登录对话框实例分析
登录对话框是应用程序中的常用部件
思考:如何开发一个可以在不同项目间复用的登录对话框?
登录对话框需求分析:
可复用软件部件
获取用户名和密码
附加需求:
随机验证码
如何获取用户输入的用户名和密码?
如何在不同的对话框间传递数据?
通过附加的成员变量和成员函数完成不同对话框间的数据传递!
将用户数据保存在私有成员变量中
通过公有函数进行数据传递
检查用户名和密码是否为空
当用户名或密码为空时提示错误
随意验证码
当随机验证码输入错误进行提示
验证码随机刷新
实例分析:登录对话框实现以及对话框间的数据传递
3.Qt中的标准对话框(上)
标准化对话框:
Qt为开发者提供了一些可复用的对话框类型
Qt提供的可复用对话框全部继承自QDialog类
Qt中的标准对话框遵循相同的使用方式:
消息对话框:
(1)消息对话框是应用程序中最常见的界面元素
(2)消息对话框主要用于:
为用户提示重要信息
强制用户进行操作选择
消息对话框的使用方式:
QMessageBox用于提示重要的程序信息
QMessageBox中实用函数:
QMessageBox::question
QMessageBox::information
QMessageBox::warning
QMessageBox::critical
QmessageBox::about
文件对话框:
文件对话框常用于以下情形:
Open Mode:应用程序中需要打开一个外部的文件
Save Mode:应用程序中将当前内容存储于用户指定的外部文件中
文件对话框的使用方式:
QFileDialog用于获取系统中的文件路径
文件类型过滤器:
在文件对话框中可以通过文件后缀定义过滤器
过滤器定义规则:
显示器(.后缀1.后缀2…)
例如:
"Image(*.png *.xpm *.jpg)"
"Text(*.txt)"
"All(*.*)"
fd.setFilter("Text(*.txt)");
QFileDialog中的实用函数:
QFileDialog::getOpenFileName
QFileDialog::getOpenFileNames
QFileDialog::getSaveFileName
4.Qt中的标准对话框(中)
颜色对话框:
(1)Qt中提供了预定义的颜色对话框QColorDialog类
(2)QColorDialog类用于提供指定颜色的对话框部件
颜色对话框的使用方式:
指定颜色:dlg.setCurrentColor(QColor(100,100,100));
Qt中的QColor类用在程序中表示颜色的概念
QColor类同时支持多种颜色表示方式
RGB:以红,绿,蓝为基准的三色模型
HSV:以色调,饱和度,明度为基准的六角椎体模型
CMYK:以天蓝,品红,黄色,黑为基准的全彩印刷色彩模型
QColorDialog中的实用函数:
QColorDialog::getColor
输入对话框:
Qt中提供了预定义的输入对话框QInputDialog类
QInputDialog类用于需要临时进行数据输入的场合
输入对话框的使用方式:
输入对话框的输入模式:
QInputDialog::TextInput 输入文本字符串 dig.textValue()
QInputDialog::IntInput 输入整形数 dig.intValue()
QInputDialog::DoubleInput 输入浮点数
QInputDialog中的实用函数:
QInputDialog::getDouble
QInputDialog::getInt
QInputDialog::getItem
QInputDialog::getText
5.Qt中的标准对话框(下)
字体对话框:
Qt中提供了预定义的字体对话框QFontDialog类
QFontDialog类用于提供选择字体的对话框部件
字体对话框的使用方式:
QFontDialog中的实用函数:
QFontDialog::getFont
Qt中提供了预定义的进度对话框QProgressDialog类
QProgressDialog类用于显示进度信息
QProgressDialog类用于需要用户等待的场合
进度对话框的使用方式:
dlg.setValue(35);
打印对话框:
Qt中提供了预定义的打印对话框QPrintDialog类
QPrintDialog类用于设置打印相关的参数信息
打印对话框的使用方式:
Qt中的QPrinter类是打印设备及其参数的封装
QPrinter类封装了系统中打印设备的驱动接口
QPrinter以相同方式使用系统中的不同打印
小结:
Qt中标准对话框的设计模式:
GUI界面部件产生数据对象
业务逻辑中的其他对象使用数据对象
GUI界面与业务逻辑通过数据对象连接
更多推荐
所有评论(0)