【嵌入式Qt开发入门】使用 UI 设计器开发程序

news2024/12/24 2:15:27

        本文我们继续学习如何使用 Qt Designer 开发程序,Qt Designer 是属于 Qt Creator 的一个功能而已,大家不要搞混了。Qt Designer 也叫 UI 设计师或者 UI 设计器,这都是指的同一 个东西。下面简单介绍如何使用 UI 设计器开发程序,以连接信号与槽为例,简单的介绍这个开发流程。最后我们思考一下这种开发方式的好处以及不便之处。

在 UI 文件添加一个按钮

        新建一个项目为 designer_example。如果还不会新建工程,请参考上文【嵌入式Qt开发入门】第一个 Qt 程序_GPIOB_PIN7的博客-CSDN博客,步骤一样, 这里不再详细说项目的建立过程了,新建的项目如下。

         添加按钮的方法也与上篇文章添加 Label 的方法一样,在左边找到 Push Button,然后拖拽到中间的显示窗体里,如下图。

         并将这个 PushButton 的 text 属性(文本属性)改为“关闭程序”。我们在后面要设计点击这个按钮将关闭这个窗口,关闭这个程序。

 在 UI 文件里连接信号与槽

        在 UI 设计器里有两种方法可以连接信号与槽。初学者可能不了解什么是 Qt 的信号与槽。 这里先简单的介绍一下信号与槽的功能。所谓信号即是一个对象发出的信号,槽即是当这个对象发出这个信号时,对应连接的槽就发被执行或者触发。以上为非专业术语解释,在后面的文章会详细学到 Qt 信号与槽机制。现在我们只要了基本的去了解一下这个信号与槽即可。可以说信号与槽在 Qt 里是必不可少的。要想事件做出对应的动作就必须用到信号与槽。

        UI 设计器里信号与槽的连接方法一: 

        在主窗体的上面部分,我们可以看到一些小小的按钮,如下图框框部分。用鼠标放在这些 按钮上面可以查看这个按钮是什么作用。信号槽连接的按钮也在上面。

        点击信号槽连接的按钮如下,如下图,点击进入信号槽连接模式(若想退出信号槽连接模式,则点击左边的按钮),进入信号与槽的连接模式后,将鼠标选中我们的“关闭程序” 按钮,按住按钮,然后用鼠标向外拖动。此时就会出现信号槽连接的符号。

         之后按如下图步骤选择,左边的“关闭程序”pushButton 按钮的信号,可以看到一个对象的信号可以有多种。右边的 QMainWindow 的槽函数,如果有其他对象,右边不一定只有 MainWidnow 的槽函数(槽),也有可能是其他对象的槽。我们选择按钮的 clicked()信号,将其连接 MainWindow 对象的 close()槽。这样就完成了信号与槽的连接,非常简单。我们也可以预知这个信号与槽的功能,当“关闭程序”pushButton 发出了 clicked()信号(也就是单击信号)。 这个信号由“关闭程序”pushButton 被单击时发出。它就会触发 MainWindow 的 close()。进而使整个程序关闭。MainWindow 的 close()就是退出关闭程序,退出程序的意思。

         完成信号槽连接,如下图。要想返回编辑部件模式点击如下图标注位置的按钮。下图就是信号与槽连接的图示了。在编辑部件模式下我们是看不见的,只有信号槽模式才能看见这样的图示。

        UI 设计器里信号与槽的连接方法二:

        选中“关闭程序”pushButton 按钮,然后右键,如下图。选择“转到槽”。

         点击“转到槽”后,弹出下面的窗口,这一步是先让我们选择信号。按如下图选择。如果 细心的同学,我们还发现这个 clicked()信号并不是 pushButton 的,而是 QAbstactButton 的。只是 pusbButton 继承了 QAbstracButton,同时把这个信号也继承了下来。除此之外我们还看到其他信号也是不是属于 pushButton 的,也是被继承下来了。所以我们在 C++基础部分学过的继承。 在 Qt 里的作用表现的淋漓尽致!根本不用重写 pushButton 的 clicked()事件。pushButton 只需要继承父类的 clicked()事件即可!

         点击 OK 后,就会跳转到槽函数里,这个代码由 Qt Creator 自动生成。

         同时在 mainwindow.h 里声明了这个槽函数。

         如果我们学过 C#,这就好像 C#里的跳转到事件一样。其实这种便捷的编程方式很多编程的 IDE 都非常类似。只要我们对这种 IDE 有一定的了解,学习起来就不会觉得难。

        返回到 mainwindow.cpp 找到 on_pushButton_clicked 这个槽函数里。在这个槽数里写上 this->close();调用 close()方法关闭整个程序。

 编译及运行创建的 UI 项目

        直接按 Ctrl + r 或者点击左下角的第一个绿色三角符号,编译且运行这个项目。运行的结果如下。点击“关闭程序”按钮,整个程序关闭退出。

        此处仍然存在许多疑问, 我们在上面用了两种方法连接信号与槽。那他们是如何连接的呢?他们两者同时连接会有影响吗?在哪里连接的呢?下文我们继续学习 Qt 信号与槽了解信号与槽的写法就能解开这个疑问。

 

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

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

相关文章

webassembly如何在js侧使用注册的容器类型

需求&#xff1a;是有个C接口&#xff0c;参数是vector<string>类型&#xff0c;那么如何在js端调用这个接口呢&#xff1f; #include <emscripten/emscripten.h> #include <emscripten/bind.h> #include <vector> #include <string> #include …

Modbus Slave和Modbus Poll的使用说明

文章目录 1 软件说明2 本例目标3 Modbus Poll配置步骤4 Modbus Slave配置步骤5 各种测试5.1 正常显示5.2 Slave Id不一致5.3 Quantity不够5.4 测试IP Address 6 总结 1 软件说明 Modbus Poll&#xff1a;是Witte Software公司开发的的Modbus主机仿真器&#xff0c;用于测试和调…

2022年影响因子新鲜出炉!(附↓)

【SciencePub学术】6月28日,科睿唯安发布2023年度《期刊引证报告》&#xff08;Journal Citation Reports&#xff0c;简称 JCR&#xff09;。 本年度《引证报告》对Web of Science核心合集收录的所有期刊赋予期刊影响因子&#xff0c;同时&#xff0c;为鼓励用户在比较期刊时…

续篇-docker篇: 优势与安装方式 及基础指令整合

目录 1. 前言简介: 1.1 docker的优势: 1.2 docker的简易理解 2. 指令安装 2.1 安装yum的插件 ps: 提示没权限加上sudo即可 root用户不用 2.2 设置yum仓库地址 ps: 设置多个镜像仓库, 不设置可能会下载变慢 ps: 如图所示 2.3 更新缓存 2.4 安装docker 2.5 查看do…

Spring Boot 中的事务超时时间

Spring Boot 中的事务超时时间 在 Spring Boot 中&#xff0c;事务管理是一个非常重要的话题。当我们在数据库中执行一些复杂的操作时&#xff0c;需要确保这些操作能够在一定的时间内完成&#xff0c;否则可能会导致数据一致性问题。为了解决这个问题&#xff0c;Spring Boot…

Linux--12--Kernel panic – not syncing: Attempted to kill init! Redhat6.2故障修复

1、Linux环境 Redhat6.2&#xff0c; Linux version 2.6.32-220.el6.i686 (mockbuildx86-003.build.bos.redhat.com) (gccversion 4,4.5 20110214 (Red Hat 4.4.5-6) (GCC) ) #1 SMP Wed Nov 9 08:02:18 EST 2011 2、故障现象 修改TCP相关文件&#xff0c;重启完Linux系统之…

ModaHub魔搭社区:Milvus的工作原理和为什么选择Milvus?

目录 为什么选择 Milvus&#xff1f; Milvus 的工作原理是什么&#xff1f; Milvus 由存储层和计算层组成&#xff0c;为了增强弹性和灵活性&#xff0c;Milvus 中的所有组件都是无状态的。系统由四个层级组成&#xff1a; Milvus 用于什么&#xff1f; 如今&#xff0c;已…

java学习记录之struts2struts标签上传国际化

Strtus2 OGNL表达式的结合 描述: struts2为OGNL表达式准备了两个对象 ActionContext: 作为ognl表达式的Context valueStack: 作为ognl表达式的Root 以上两个对象的创建 都是strutsPrepareAndExecuteFilter中准备好. Ognl和Struts使用上的结合: 表单提交,其中提交的键可以看作…

iview切换Select时选项丢失,重置Seletc时选项丢失

分析原因 在旧版本的iview中如果和filterable一起使用时&#xff0c;当值清空选项或者使用重置按钮清空时选项会丢失。 解决方式一 把去掉filterable 解决方式二 使用ref&#xff0c;调用clearSingleSelect()方法清空 ref"perfSelect" this.$refs.perfSelect.c…

Nginx上游节点健康检测

Nginx默认是没有支持上游节点健康检测的。 可以使用Tengine 文档 - The Tengine Web Server 或者自行下载nginx然后自己安装nginx_upstream_check_module 模块 在linux下载nginx wget http://nginx.org/download/nginx-1.25.1.tar.gz 下载插件 GitHub - yaoweibin/nginx_u…

【Java高级编程】Java8的新特性

Java8的新特性 1、Java8的新特性概述2、Lambda表达式2.1、Lambda表达式使用前后的对比2.2、Lambda表达式的基本语法2.3、如何使用&#xff1a;分为六种情况 3、函数式接口3.1、函数式接口的使用说明3.2、Java8中关于Lambda表达式提供的4个基本的函数式接口3.3、总结 4、方法引用…

开源建站博客社区系统大放送

前言 软件开发成本非常高昂&#xff0c;写demo易&#xff0c;做产品难&#xff0c;难就难在无数细节需要精雕细琢。 学习博客、论坛、内容管理系统这些典型的、通用型的系统&#xff0c;能极大提升你的软件架构和开发能力。本文筛选了目前主流的开源项目&#xff0c;帮助大家入…

动手学深度学习v2 p1引言 监督学习与无监督学习

1.引言 1.2. 机器学习中的关键组件 首先介绍一些核心组件。无论什么类型的机器学习问题&#xff0c;都会遇到这些组件&#xff1a; 可以用来学习的数据&#xff08;data&#xff09;&#xff1b; 如何转换数据的模型&#xff08;model&#xff09;&#xff1b; 一个目标函数…

linux--用户相关

目录 一.要在云服务器官网重置root密码成功后才能登录xshell(重装系统后登录也不例外&#xff09; 二.添加普通用户&#xff1a; 三.查看root下有几个普通用户&#xff1a; 四.给用户设置密码&#xff1a; 五、用户登录​编辑 六、查看当前所在用户&#xff1a; 七、查看…

windows上phpstudy 在切换php7.0到7.2后项目404

项目从7.0切换到7.2.9一访问本地就报404&#xff0c;然后重启 重新配置nginx.conf也无效 然后取查看phpstudy 的 nginx/logs/error.log 发现一访问本地网站就报下面错 phpstudy报错 2023/06/28 11:36:28 [error] 14128#19616: *1 upstream prematurely closed connection whi…

Linux——扩容/根分区(LVM+非LVM)

摘要 本博文主要是对linux虚拟机进行磁盘得扩容操作。 在计算机中MBR&#xff08;Master Boot Record&#xff09;&#xff08;主引导记录&#xff09;和GPT&#xff08;GUID Partition Table&#xff09;&#xff08;GUID意为全局唯一标识符&#xff09;是在磁盘上存储分区信…

Redis跳跃表是如何添加元素的?

今天分享的这道题来自于蔚来的真实面试题。 Java 面试不可能不问 Redis&#xff0c;问到 Redis 不可能不问 Redis 的常用数据类型&#xff0c;问到 Redis 的常用数据类型&#xff0c;不可能不问跳跃表&#xff0c;当问到跳跃表经常会被问到跳跃表的查询和添加流程&#xff0c;…

conda虚拟环境中安装的cuda和服务器上安装的cuda的异同

服务器上已安装Nvidia提供的cuda&#xff0c;nvidia-smi时会出现已安装的CUDA版本。如下图所示&#xff0c;服务器上已安装好的cuda版本为10.1。 但是当我们在Anaconda虚拟环境下安装pytorch或者paddlepaddle等深度学习框架的GPU版本时&#xff0c;通常会选择较高版本的cuda&a…

python3开发-Word助手

目录 背景 思路 步骤 代码示例 总结 背景 在日常工作和学习中&#xff0c;我们经常需要处理Word文档&#xff0c;例如编辑、提取内容、生成报告等。而Python是一门功能强大的编程语言&#xff0c;它提供了丰富的库和工具&#xff0c;使得我们可以利用Python来处理Word文档…

chatgpt赋能python:Python运输打折问题解决方案

Python运输打折问题解决方案 作为一个有10年Python编程经验的工程师&#xff0c;我深知Python在物流行业中的广泛应用。而运输打折作为物流运营中的重要一环&#xff0c;一直是Python开发者面临的一个难题。本文将介绍一些 Python 应用程序&#xff0c;帮助你计算和优化你的运…