QDialog 类代表对话框。对话框一般用来实现那些只是暂时存在的用户界面。对话框是独立的窗口,但通常它也有父窗口,当对话框显示时,默认的位置在父窗口的中央。从外观上来看,对话框一般没有最大化、最小化按钮。
对话框有模态和非模态两种形式。非模态对话框的的行为和使用方法都类似于普通的窗口。模态对话框则有所不同,当模态对话框显示时,其他窗口将全部进入非激活状态,不能接受键盘和鼠标事件。模态的方式又可以分为两种,一种是对整个应用程序模态,这时它的出现将导致程序中的所有窗口失去响应;另一种是对窗口模态,这时仅仅会导致它所在的整个窗口树失去响应。
构造
QDialog 类的构造函数与 QWidget 类形式相同:
QDialog (QWidget *parent = 0, Qt::WindowFlags f = 0);
用下面的成员函数可将对话框设为模态:
void setModal(bool modal); // 设置对话框的模态性
void setWindowModality(Qt::WindowModality windowModality);
1)Qt::NonModal:非模态。
2)Qt::WindowModal:窗口模态。
3)Qt::ApplicationModal:应用程序模态。
与模态性相关的成员函数还有以下两个:
Qt::WindowModality windowModality() const; // 得到窗口的模态性
bool isModel() const; // 判断窗口是否为模态的
执行与结果
下面这个函数将以模态方式显示对话框:
int exec(); // 这是一个槽
对话框的结果与下面的函数有关:
virtual void done(int r); // 关闭对话框并返回结果 r,这是一个槽。
1)QDialog::Accepted:表示确定。
2)QDialog::Rejected:表示取消。
对话框通常有一个确定按钮和一个取消按钮,它们能使对话框关闭并返回相应的值。为了与按钮的 clicked() 信号连接,需要用到以下的槽:
virtual void accept(); // 槽,等价于 done(QDialog::Accepted)
virtual void reject(); // 槽,等价于 done(QDialog::Rejected)
打开
下面这个函数将以对窗口模态的方式显示对话框:
void open(); // 这是一个槽