Qt 常用类 (10)—— QDialog

本文详细解释了QDialog类在Qt框架中的构造、模态性、执行与结果、对话框操作等方面的功能和使用方法,包括如何通过模态和非模态方式展示对话框,以及与模态性相关的成员函数和执行过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        QDialog 类代表对话框。对话框一般用来实现那些只是暂时存在的用户界面。对话框是独立的窗口,但通常它也有父窗口,当对话框显示时,默认的位置在父窗口的中央。从外观上来看,对话框一般没有最大化、最小化按钮。

        对话框有模态和非模态两种形式。非模态对话框的的行为和使用方法都类似于普通的窗口。模态对话框则有所不同,当模态对话框显示时,其他窗口将全部进入非激活状态,不能接受键盘和鼠标事件。模态的方式又可以分为两种,一种是对整个应用程序模态,这时它的出现将导致程序中的所有窗口失去响应;另一种是对窗口模态,这时仅仅会导致它所在的整个窗口树失去响应。  



        构造

        QDialog 类的构造函数与 QWidget 类形式相同:

QDialog (QWidget *parent = 0, Qt::WindowFlags f = 0);



        模态性

        用下面的成员函数可将对话框设为模态:

void setModal(bool modal);    // 设置对话框的模态性

         当参数 model 为 true 时,对话框设为模态,否则设为非模态。如果设为模态,则默认是对整个应用程序模态的。要设为对窗口模态,则需要用以下函数:

void setWindowModality(Qt::WindowModality windowModality);

         实际上它是从 QWidget 类继承过来的一个成员函数,其中 Qt::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,这是一个槽。

        这时一个槽,它将使对话框关闭,使对 exec 函数的调用返回。参数 r 是整数值,但最好使用 QDialog::DialogCode 枚举类型所定义的两个值。

        1)QDialog::Accepted:表示确定。

        2)QDialog::Rejected:表示取消。


        对话框通常有一个确定按钮和一个取消按钮,它们能使对话框关闭并返回相应的值。为了与按钮的 clicked() 信号连接,需要用到以下的槽:

virtual void accept();    // 槽,等价于 done(QDialog::Accepted)
virtual void reject();      // 槽,等价于 done(QDialog::Rejected)


        

         打开

         下面这个函数将以对窗口模态的方式显示对话框:

void open();    // 这是一个槽

         它也是一个槽。与 exec 函数不同的是,open 函数将立刻返回而不是等待对话框关闭。它一般用在需要显示模态对话框但又要继续进行工作的场合,比如一个进度对话框。这时候,需要在工作处理过程中间歇性地调用 QApplication 对象的 processEvents 成员函数,否则对话框的事件将的不到处理。



              
        

        

   

### QTQDialog的使用方法 #### 创建和显示对话框 `QDialog` 是Qt框架中的一个预定义好的对话框类,主要用于短期任务以及与用户的简要交互。创建 `QDialog` 实例后可以通过调用成员函数来配置对话框属性[^1]。 ```cpp #include <QApplication> #include <QDialog> int main(int argc, char *argv[]) { QApplication app(argc, argv); QDialog dialog; dialog.setSizeGripEnabled(true); // 启用大小调整手柄 dialog.setWindowTitle("示例对话框"); dialog.resize(400, 300); dialog.show(); return app.exec(); } ``` 这段代码展示了如何初始化一个基本的 `QDialog` 并设置其尺寸、标题等基本信息。 #### 设置标准按钮 为了使对话框具有功能性的反馈机制,可以为其添加一组标准按钮,比如确认(OK)、取消(Cancel)。这通过 `setStandardButtons()` 方法完成,并且能够捕获用户的选择结果以便后续处理逻辑[^2]。 ```cpp dialog.setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); int result = dialog.exec(); if (result == QDialog::Accepted) { // 处理接受的情况... } else if (result == QDialog::Rejected) { // 应对拒绝的情形... } ``` 上述片段说明了怎样向对话框加入常见的控制按键组合及其对应的响应行为模式。 #### 获取返回值 当执行完 `exec()` 函数之后会得到一个整型数值作为该次运行的结果码,它反映了最终是由哪个选项触发了退出事件——即接受了还是拒绝对话框的内容。基于此信息可进一步采取相应的措施[^3]。 ```cpp void showDialog() { QDialog dialog; dialog.setWindowTitle("示例对话框"); int result = dialog.exec(); if (result == QDialog::Accepted) { QMessageBox::information(nullptr, "结果", "用户接受了对话框"); } else if (result == QDialog::Rejected) { QMessageBox::information(nullptr, "结果", "用户拒绝了对话框"); } } ``` 这个例子具体实现了根据不同的返回状态弹出不同提示信息的功能。 #### 内置常用对话框 除了自定义设计外,Qt还提供了几种常用的内置对话框类型供开发者快速选用,例如消息框 (`QMessageBox`)、文件选择器 (`QFileDialog`) 和颜色选取器 (`QColorDialog`) 等[^4]。 对于颜色选择场景下的应用实例: ```cpp #include <QColorDialog> // ... QColor color = QColorDialog::getColor(Qt::red); ``` 此处演示了利用静态方法简便地获取用户选定的颜色值[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值