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();  

    }

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

相关推荐
超龄编码人11 小时前
Qt Widgets Designer QTabWidget无法添加布局
开发语言·qt
vegetablesssss11 小时前
vtk镜像图
c++·qt·vtk
Ulyanov15 小时前
基于 Python 的三维动态导弹攻防演示系统设计与实现:从架构到实战的深度剖析
开发语言·python·qt·架构·雷达电子对抗
小短腿的代码世界15 小时前
Qt WebEngine深度解析:Chromium多进程架构与Qt信号槽的双向融合
qt·搜索引擎·单元测试
charlie11451419117 小时前
现代Qt开发教程(新手篇)1.10——进程
开发语言·c++·qt·学习
小短腿的代码世界17 小时前
Qt量化策略编辑器深度解析:从DSL解析到可视化编排的完整架构
qt·架构·编辑器
十五年专注C++开发17 小时前
Qt实现带多选功能的组合复选框
开发语言·c++·qt·qcombobox
柳鲲鹏18 小时前
QT:正确延时调用,Cannot create children for a parent that is in a different thread.
服务器·数据库·qt
(Charon)18 小时前
【C++/Qt】Qt 实现 WebSocket 测试工具:连接、消息收发与通信日志
c++·qt·websocket
十五年专注C++开发18 小时前
CMake基础: Qt之qt5_wrap_ui
开发语言·c++·qt·ui