QT基础教程(对话框1)

news2024/10/7 8:27:27

文章目录

  • 前言
  • 一、对话框概念
  • 二、模态对话框
  • 三、非模态对话框
  • 总结


前言

本篇文章我们来讲解QT中的对话框。

资料合集地微信公众号:优质程序猿

一、对话框概念

在Qt中,对话框(Dialog)是一种用于与用户进行交互、收集输入或展示信息的窗口。对话框可以包含各种控件(例如文本框、按钮、复选框等),用于接收用户的输入或显示特定信息。Qt提供了几种不同类型的对话框,用于满足不同的需求。

下面是一些常见的Qt对话框类型:

1.模态对话框(Modal Dialog):模态对话框是一种会阻塞其他窗口的对话框。当模态对话框显示时,用户必须与该对话框进行交互,然后才能恢复与应用程序的其他部分的交互。使用QDialog类可以创建模态对话框。

2.非模态对话框(Modeless Dialog):非模态对话框不会阻塞其他窗口,用户可以在打开的对话框和应用程序的其他部分之间自由切换。使用QDialog类和show()函数可以创建非模态对话框。

3.文件对话框(File Dialog):文件对话框用于选择文件或保存文件。Qt中提供了QFileDialog类,用于创建文件选择对话框和文件保存对话框。

4.字体对话框(Font Dialog):字体对话框用于选择字体样式、大小和颜色。Qt中提供了QFontDialog类,用于创建字体选择对话框。

5.颜色对话框(Color Dialog):颜色对话框用于选择颜色。Qt中提供了QColorDialog类,用于创建颜色选择对话框。

在这里插入图片描述

二、模态对话框

模态对话框(Modal Dialog)是一种在Qt中常见的对话框类型。与非模态对话框不同,模态对话框在打开时会阻塞应用程序的其他部分,直到用户完成对话框的交互并关闭对话框为止。这意味着用户必须首先处理模态对话框,然后才能继续与应用程序进行交互。
在Qt中,可以使用QDialog类来创建模态对话框。下面是一些模态对话框的常见特点和使用方式:

1.创建模态对话框:可以通过创建QDialog的子类,或使用QDialog的实例来创建模态对话框。可以在构造函数中添加控件、布局和信号槽等。

2.打开模态对话框:使用模态对话框的exec()函数来打开对话框。该函数将阻塞程序并等待对话框关闭后返回结果。

3.处理对话框结果:可以在对话框中的控件上进行交互,例如按钮点击或文本输入等。对话框关闭后,可以通过判断对话框的返回值或使用信号槽来处理用户的输入或选择。

4.关闭对话框:可以使用accept()或reject()函数来关闭模态对话框。accept()表示用户接受对话框的结果,reject()表示用户取消对话框的操作。

模态对话框通常用于需要用户提供重要信息、做出决策或执行特定任务的场景。由于模态对话框会阻塞应用程序的其他部分,应谨慎使用,以避免使应用程序看起来不响应或卡死。

需要注意的是,Qt也提供了非模态对话框的选项,可以让用户在对话框打开的同时继续与应用程序进行交互。这样的对话框称为非模态对话框或模式对话框。

示例代码:

#include <QApplication>
#include <QDialog>
#include <QPushButton>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建一个模态对话框
    QDialog dialog;
    dialog.setWindowTitle("Modal Dialog");

    // 添加按钮
    QPushButton button("OK", &dialog);
    button.setGeometry(10, 10, 80, 30);

    // 连接按钮的点击事件
    QObject::connect(&button, &QPushButton::clicked, &dialog, &QDialog::accept);

    // 打开模态对话框
    dialog.exec();

    // 判断对话框的返回值
    if (dialog.result() == QDialog::Accepted) {
        // 用户接受对话框操作
        // 执行相应的逻辑
    } else if (dialog.result() == QDialog::Rejected) {
        // 用户取消对话框操作
        // 执行相应的逻辑
    }

    return app.exec();
}

以上代码创建了一个简单的模态对话框,其中包含了一个"OK"按钮。当用户点击"OK"按钮时,对话框会被接受(accept),否则对话框会被拒绝(reject)。你可以根据自己的需要添加更多的控件和逻辑。

运行结果:
在这里插入图片描述

三、非模态对话框

非模态对话框(Modeless Dialog),也称为模式对话框,与模态对话框不同,非模态对话框在打开时不会阻塞应用程序的其他部分,用户可以在对话框打开的同时与应用程序进行交互。这种对话框通常用于需要用户进行辅助操作或提供信息的场景。

在Qt中,可以使用QDialog类来创建非模态对话框。下面是一个简单的示例代码来创建一个非模态对话框:

#include <QApplication>
#include <QDialog>
#include <QPushButton>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建一个非模态对话框
    QDialog dialog;
    dialog.setWindowTitle("Modeless Dialog");

    // 添加按钮
    QPushButton button("Close", &dialog);
    button.setGeometry(10, 10, 80, 30);

    // 连接按钮的点击事件
    QObject::connect(&button, &QPushButton::clicked, &dialog, &QDialog::close);

    // 显示非模态对话框
    dialog.show();

    return app.exec();
}

以上代码创建了一个简单的非模态对话框,其中包含了一个"Close"按钮。当用户点击"Close"按钮时,对话框会被关闭。与模态对话框不同的是,非模态对话框的显示使用的是show()函数,而不是exec()函数。

总结

本篇文章就讲解到这里大家后面可以进行复习和巩固。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1017653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

适用于 Android 的 Windows 子系统™️发行说明

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 内部版本 2304.40000.3.0 内部版本 2303.40000.3.0 内部版本 2302.4000 内部版本 2301.40000.4.0 内部版本 221…

【wxWidgets 如何实现wxAccordion 手风琴组件】

1. 简要说明 wxWidgets 并没有提供wxAccordion 手风琴组件面板, 网上也基本没有找到资料,CSDN有个标题:wxAccordion:wxWidgets的手风琴控件下载链接,再无资料可查, 但是其他语言是提供了手风琴面板组件的, 那么怎么办呢,开干喽… 2. 效果展示 3. 交流探讨 代码就暂时不发了,…

【LeetCode-简单题】225. 用队列实现栈

文章目录 题目方法一&#xff1a;单个队列实现 题目 方法一&#xff1a;单个队列实现 入栈 和入队正常进行出栈的元素其实就是队列的尾部元素&#xff0c;所以直接将尾部元素弹出即可&#xff0c;其实就可以将除了最后一个元素的其他元素出队再加入队&#xff0c;然后弹出队首元…

第二章 进程与线程 八、处理机调度(时机切换、过程调度方式)

一、进程调度的时机 二、进程调度的方式 1、非剥夺调度方式&#xff1a; 非剥夺调度方式&#xff0c;又称非抢占方式。即只允许进程主动放弃处理机。在运行过程中即便有更紧迫的任务到达&#xff0c;当前进程依然会继续使用处理机&#xff0c;直到该进程终止或主动要求进入阻…

virtualbox配置ubuntu1804虚拟机相关流程

virtualbox配置ubuntu1804虚拟机相关流程 相关版本能解决的问题安装流程1&#xff1a;新建虚拟机安装流程2&#xff1a;配置虚拟机安装流程3&#xff1a;安装虚拟机系统安装流程4&#xff1a;设置ubuntu 相关版本 virtualbox使用VirtualBox官网下载的6.1.34 r150636 版。ubunt…

CSRF攻击原理详解

CSRF概念&#xff1a; CSRF定义&#xff1a; 跨站请求伪造&#xff08;英语&#xff1a;Cross-site request forgery&#xff09;是一种对网站的恶意利用&#xff0c;也被称为 one-click attack 或者 session riding&#xff0c;通常缩写为 CSRF 或者 XSRF&#xff0c; 是一种…

通用商城项目(下)之——Nginx的安装及使用

&#xff08;作为通用商城项目的一个部分&#xff0c;单独抽离了出来。查看完整见父页面&#xff1a; &#xff09; 加入Nginx-完成反向代理、负载均衡和动静分离 1.配置SSH-使用账号密码&#xff0c;远程登录Linux 1.1配置实现 1、配置sshd 1)sudo vi /etc/ssh/sshd_confi…

Rasa:使用大语言模型进行意图分类

Rasa:使用大语言模型进行意图分类 在Rasa的最新版本(3.x)中,引入了一种新的意图分类方法,即使用大型语言模型(LLM)和一种称为检索增强生成(RAG)的方法进行意图分类。 LLM意图分类器是一种全新的意图分类器,利用大型语言模型(LLM)来对意图进行分类。LLM意图分类器…

汽车租赁系统设计与实现

汽车租赁系统 1&#xff0e;需求分析 1.1任务概述 1.2开发环境和使用技术 1.3数据库设计 2&#xff0e;登陆模块 2.1登陆页面的代码是&#xff1a; 2.2登录类login.java的代码如下&#xff1a; 2.3LoginServlet.java的代码如下&#xff1a; 3&#xff0e;公共…

ESP-IDF学习——1.环境安装与hello-world

ESP-IDF学习——1.环境安装与hello-world 0.前言一、环境搭建1.官方IDE工具2.vscode图形化配置 二、示例工程三、自定义工程四、点灯五、总结 0.前言 最近在学习freertos&#xff0c;但由于买的书还没到&#xff0c;所以先捣鼓捣鼓ESP-IDF&#xff0c;因为这个比Arduino更接近底…

神秘字符(acm模式)

#include<iostream> #include<cctype> #include<string> using namespace std; int main() {int n;cin >> n;getchar();while (n--){string str, str1, str2"";//cin >> str >> str1;getline(cin, str);//遇到换行符就忽略&…

GB28181学习(五)——实时视音频点播(信令传输部分)

要求 实时视音频点播的SIP消息应通过本域或其他域的SIP服务器进行路由、转发&#xff0c;目标设备的实时视音频流宜通过本域的媒体服务器进行转发&#xff1b;采用INVITE方法实现会话连接&#xff0c;采用RTP/RTCP协议实现媒体传输&#xff1b;信令流程分为客户端主动发起和第…

CCC数字钥匙设计【BLE】--PE进入流程建立BLE加密连接

1、PE进入流程 PE进入的流程大体可以拆解为如下步骤&#xff1a; 1、手机与车端建立BLE加密连接&#xff1b; 2、创建URSK流程&#xff1b; 3、时间同步流程&#xff1b; 4、UWB测距流程&#xff1b; 5、根据各锚点BLE的RSSI及UWB的距离值&#xff0c;通过定位算法进行手…

Android 图片加载框架Glide源码详解

我们看Glide的源码从Glide类入手&#xff0c;使用的时候我们先调用的with方法&#xff0c;源码中with有3个多载的方法&#xff1a;下图翻译过来就是activity用FragmentActivity Applicationcontext用 with&#xff08;Context&#xff09;还有一个with&#xff08;View)的 殊途…

西瓜书读书笔记整理(六)—— 第六章 支持向量机

第六章 支持向量机 6.1 间隔与支持向量6.1.1 什么是支持向量机6.1.2 支持向量与间隔6.1.3 支持向量机的求解过程 6.2 对偶问题&#xff08;dual problem&#xff09;6.2.1 什么是对偶问题6.2.2 如何求解支持向量机的对偶问题 6.3 核函数&#xff08;kernel function&#xff09…

基于Xml方式的Bean的配置-Bean的作用范围scope配置

SpringBean的配置详解 Bean的配置范围 默认情况下&#xff08;基本的Spring环境&#xff09;&#xff0c;单纯Spring环境Bean的作用范围有两个&#xff1a;Singleton和prototypesingleton:单例&#xff0c;默认值&#xff0c;Spring容器创建的时候&#xff0c;就会进行Bean的实…

【VS Code】根据时间和文件名查看增删改的历史记录

我的 VS Code 已设置为自动保存。 左下角这个 TIMELINE 里面记录着我们使用 VS Code 操作各文件的历史记录。 打开 Local History 可以根据时间和文件名查看增删改的历史记录&#xff0c;比如&#xff1a; 然后我们根据时间和文件名&#xff0c;打开一个文件&#xff1a; 即可…

讲座1:影像重建_脑疾病_大脑解码

视频来源&#xff1a;https://www.bilibili.com/video/BV11K4y1979o/?spm_id_from333.999.0.0&vd_source897075bbdd61e45006d749612d05a2ab 文章目录 Image Reconstruction and SegmentationMR Image ReconstructionBrain ROI Segmentation Brain Disease --- Alzheimers…

嵌入式开源组件——LwRB(RingBuffer)的移植和应用

说明&#xff1a;记录自己学习的过程&#xff0c;如有理解上的错误或者不恰当的地方请原谅。 一、简介 LwRB 是一个针对嵌入式系统优化的通用FIFO&#xff08;先进先出&#xff09;缓冲区库&#xff0c;之前的名称叫做RingBuffe &#xff0c;不知道作者在V2.0.0版本时&…

C++11线程库简介

前言 在c11之前涉及多线程的问题都是和平台相关的&#xff0c;比如windows和linux都有一套自己的接口&#xff0c;这使得代码的可移植性变差。C11中最重要的特性就是对线程进行了支持&#xff0c;使得C在编程时不再依赖第三方库&#xff0c;而且原子操作中还引入了原子类的概念…