当前位置: 首页 > article >正文

qt QDialog详解

1、概述

QDialog是Qt框架中用于创建对话框的类,它继承自QWidget。QDialog提供了一个模态或非模态的对话框,用于与用户进行交互。模态对话框会阻塞其他窗口的输入,直到用户关闭该对话框;而非模态对话框则允许用户同时与多个窗口进行交互。QDialog可以包含各种控件,如按钮、文本框、标签等,用于收集用户输入或显示信息。

2、重要方法
  • exec():以模态方式运行对话框,并返回用户选择的按钮(如QDialog::Accepted或QDialog::Rejected)。这是模态对话框最常用的方法。
  • open():以非模态方式显示对话框。
  • close():关闭对话框。
  • accept():接受对话框,通常与“确定”或“是”按钮相关联,并返回QDialog::Accepted。
  • reject():拒绝对话框,通常与“取消”或“否”按钮相关联,并返回QDialog::Rejected。
  • setModal(bool modal):设置对话框是否为模态。
  • setResult(int result):设置对话框的结果代码。
  • result():返回对话框的结果代码。

3、重要信号
  • accepted():当用户接受对话框时发出。
  • rejected():当用户拒绝对话框时发出。
  • finished(int result):当对话框关闭时发出,并返回结果代码。
#include <QApplication>  
#include <QDialog>  
#include <QVBoxLayout>  
#include <QLabel>  
#include <QLineEdit>  
#include <QPushButton>  
#include <QDebug>  
  
class MyDialog : public QDialog {  
    Q_OBJECT  
  
public:  
    MyDialog(QWidget *parent = nullptr) : QDialog(parent) {  
        setWindowTitle("简单对话框");  
  
        QVBoxLayout *layout = new QVBoxLayout(this);  
  
        QLabel *label = new QLabel("请输入您的名字:", this);  
        layout->addWidget(label);  
  
        nameEdit = new QLineEdit(this);  
        layout->addWidget(nameEdit);  
  
        QPushButton *okButton = new QPushButton("确定", this);  
        connect(okButton, &QPushButton::clicked, this, &MyDialog::accept);  
        layout->addWidget(okButton);  
  
        QPushButton *cancelButton = new QPushButton("取消", this);  
        connect(cancelButton, &QPushButton::clicked, this, &MyDialog::reject);  
        layout->addWidget(cancelButton);  
    }  
  
    QString getName() const {  
        return nameEdit->text();  
    }  
  
private:  
    QLineEdit *nameEdit;  
};  
  
int main(int argc, char *argv[]) {  
    QApplication app(argc, argv);  
  
    MyDialog dialog;  
    if (dialog.exec() == QDialog::Accepted) {  
        qDebug() << "用户输入的名字:" << dialog.getName();  
    } else {  
        qDebug() << "用户取消了对话框。";  
    }  
  
    return app.exec();  
}  

觉得有帮助的话,打赏一下呗。。

           


http://www.kler.cn/a/376002.html

相关文章:

  • 文件管理软件根据多个关键字将不同目录下的文件夹批量复制或移动到新的指定文件夹,完成大量文件夹和文件管理任务
  • Axure使用动态面板制作新闻栏目高级交互
  • 制作安装k8s需要的离线yum源
  • 从线性代数到unity mvp矩阵
  • flinksql-Queries查询相关实战
  • vxe-table v4.8+ 与 v3.10+ 虚拟滚动支持动态行高,虚拟渲染更快了
  • static全局/局部变量/函数和普通全局/局部变量/函数的区别
  • 数据结构初识及顺序表详解
  • Mysql 8.4.3LTS 的离线部署
  • vue中时间插件moment
  • Java中的JVM(Java虚拟机)是什么?
  • 【OD-支持在线评测】电脑病毒感染(200分)
  • Android版本适配策略
  • 模式匹配类型
  • 使用AWS Redshift从AWS MSK中读取数据
  • Dropout 技术:防止神经网络过拟合的有效手段
  • 20241029软考架构-------软考案例9答案
  • AI 大模型的发展趋势是怎样的?
  • 量子神经网络(Quantum Neural Network):结合量子计算的 AI 新探索
  • cv.dnn.blobFromImage参数详解
  • Unity项目使用的.net版本
  • 【网络】HTTP(超文本传输协议)详解
  • Java面试题十五
  • 基于大数据的智能家居销量数据分析
  • 基于OSS搭建在线教育视频课程分享网站
  • 提升效率:中小企业常用的8款任务管理工具