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

QT界面开发:图形化设计、资源文件添加


设计界面介绍 

此时我们创建项目时就可以选择添加UI选项了。 添加完之后,我们可以看到,文件中多出了一个存放界面文件的目录,下面有个.ui的界面文件。甚至pro的项目文件中也会添加一项内容。

 我们点击界面文件中的.ui文件,我们可以来到设计界面。设计界面的一套流程主要包括以下几个步骤:1.使用工具箱中的控件(如按钮、文本框、标签等)拖拽到主窗体上。2.通过属性编辑器调整控件的属性(如大小、字体、颜色等),3.使用布局管理器(如水平布局、垂直布局等来控制控件的排列与自适应行为)。4.连接信号与槽:右击控件,选择"转到槽..."来创建和编辑槽函数。 

在这里,我们可以拖拽一些控件来实现界面的布局等信息。感觉跟之前学C#时的感觉很像,来感觉了。通过界面化的拖拽组件、部件等可以极大的解放我们去记一些类,通过拖拽,它能自动生成代码。通过右下角的属性界面,我们可以直接设置组件的一系列属性。

 太方便了有没有,此时就可以发挥你的想象来进行设计了。

然后我们试着设计一个登录界面:

登录界面初创建:

在上面的菜单栏输入一些文字,然后拖拽一个groupBox当作一个子容器,然后再分别拖拽两个标签、两个LineEdit、两个PushButton。然后调整布局,修改文本属性。设置成如下界面。

 然后我们就可以对按钮Button以及动作Action的点击/引发信号进行槽回应处理。从而实现我们的具体功能了。

登录功能初实现:

第一步:将子容器内的退出按钮与菜单栏下的退出动作与窗体的close关联上。

右击鼠标转到槽,然后选择需要发送的信号,然后会自动跳转到新建的槽函数中:

然后我们添加一句this->close();就可以将退出功能实现了。经过测试,结果与预期一致。但是对于菜单栏下的动作,我们不能右击鼠标进行转到槽。那我们就可以用connect自己进行连接:(按钮我们也可以进行这样的操作)

    //退出按钮// connect(ui->btnExit,&QPushButton::clicked,this,&QWidget::close);//退出动作connect(ui->actionexit,&QAction::triggered,this,&QWidget::close);

 第二步:确认按钮的逻辑实现

void MainWindow::on_btnSure_clicked()
{//登录按钮bool isContinue=true;if(ui->txtUid->text().size()==0){ui->statusbar->showMessage("用户名为空");isContinue=false;}else if(ui->txtPwd->text().size()==0){ui->statusbar->showMessage("密码为空");isContinue=false;}if(isContinue){// 新建一个窗口,点击登录,关闭该窗口,打开另一个窗口frmNext=new QMainWindow();frmNext->show();this->hide();}else {QMessageBox* msg=new QMessageBox(this);msg->setWindowTitle("警告");msg->setText("请输入账号/密码");msg->show();}
}

对于登录按钮,我们需要对我们输入的信息进行逻辑判断,第一点就是判空,如果用户名为空,我们就在状态栏给出具体错误信息:例如:“用户名为空"、"密码为空”等,为了确保用户能够看到,我们也可以使用QMessageBox进行消息提示框进行提醒,消息提示框我们可以使用另外一种简单的方式:

QMessageBox::warning(this,"警告","请检查是否输入账号以及密码");

此外,Qt为我们提供了许多标准的对话框,消息提示框只是其中一个

对于我们的消息提示框,Qt也为我们设计好了一些常用的标准框:

包括: 报错(critical),提示(information),询问(question),警告(warning),以及自定义提示框的图标的一个standardIcon()。

 回到正文,我们的登录按钮的逻辑第一就是判空,第二就是判断用户账号是否存在,然后再判断密码是否正确。这块一般使用数据库或者是文件操作,留给大家自行选择,自己实现了。(不懂得,可以看一下我C#实现图书馆信息管理系统那篇文章,看一下具体的逻辑,再回来写C++的代码)。至此,我们的两大功能:登录和退出就已经实现了,然后就是注册账号和找回密码。

这块都是需要进行用户数据匹配的,还是比较建议使用数据库,没学过用普通的文件操作也能实现。如果都不会,那数组总该会了吧。

定义一个用户类型的结构体,包括用户名和密码。然后每注册一个就将该用户加入到数组中,这样注册功能就实现了。忘记密码就是根据结构体对象的用户名匹配用户密码。登陆时也可以使用这样的方法进行用户匹配。还有用户名是否唯一、用户名是否存在的问题都需要考虑在内,此处我们需要考虑很多,但都不难。用数组的缺点就是只能在本次运行时,获取本次注册的用户信息,如果程序结束,下次运行将无法找回数据。所以文件操作可以解决这个问题,数据库当然也能,随大家意愿。

资源文件添加

此时你会觉得,上面的界面有点丑,我想加点图片啊什么的。当然了,十分的ok。我们现在尝试为菜单栏的菜单项添加一个自己喜欢的图片作为图标。

我们将图片路径添入:

ui->menuFile->setIcon(QIcon("D:/L/Pictures/wx存储/WeChat Files/All Users/stark.jpg"));

但是,不是每个人存放的路径都是跟我一样的,那我们复制这段代码运行后就会出错。我们怎么解决呢?就是引入资源文件,将图片等资源放到项目内:

第一步:将图片/文件夹放到本项目目录下

①、复制需要添加的项目资源文件夹。

②、找到项目,放到目录下:

这样,资源文件就添加到我们的项目中了,以后将项目传给别人时,项目资源也会传给别人,我们就无需访问本机绝对路径了。你以为这样就完了?还没有:

③、右击项目,新建文件:

为资源文件夹起名 :

此时我们就会发现,项目下多出了一个资源目录:

 

但是,当你退出该页面后,想要再次进入该文件,你会发现,双击不管用了。那么我们就需要右击该文件,然后以编辑的形式打开:

我们即可再次进入。进入之后,我们能添加一些前缀,这些前缀就是分组的意思,比如有些项目中,资源分为:人物、风景、宠物等,那么我们应该加上合适的前缀去寻找对应的资源,这里我们不加任何前缀,只有一个单独的 / 了。

选中所有图片:

 最终效果:

 

我就添加了这四个,当然,我们一定要为图片起好名字, 不然就有的难受了。此时我们再进行图标的设置,现在我为下面的注册添加一个懒大王的图标:

ui->actionregister->setIcon(QIcon("://项目资源/懒大王.png"));

记得冒号:,第一个/为前缀名。后面为资源路径 。


ok了,今天的内容就到这里吧。我们下期再见。

相关文章:

QT界面开发:图形化设计、资源文件添加

设计界面介绍 此时我们创建项目时就可以选择添加UI选项了。 添加完之后,我们可以看到,文件中多出了一个存放界面文件的目录,下面有个.ui的界面文件。甚至pro的项目文件中也会添加一项内容。 我们点击界面文件中的.ui文件,我们可以…...

科大讯飞:成本降低 60%,性能提升 10 倍,从 ES Loki 到 Apache Doris 可观测性存储底座升级

导读:科大讯飞星际日志中心经历了从 Elasticsearch 到 Loki,再到 Apache Doris 的可观测性存储分析底座升级,支持可观测三大支柱 Log Trace Metrics 的存储与分析,有效解决 Elasticsearch 成本高、Loki 查询慢的问题。Doris 能够在…...

ISO26262在汽车领域的意义

ISO 26262在汽车领域的意义非常重大,主要体现在以下几个方面: 一、提高汽车功能安全性 统一标准:ISO 26262是汽车电子系统的功能安全标准,为汽车制造商、供应商和相关行业提供了统一的框架和指南,确保汽车电子系统和软…...

11. 事件机制

① 事件模式必须基于 PSR-14 去实现。 ② Hyperf 的事件管理器默认由 hyperf/event 实现,该组件亦可用于其它框架或应用,只需通过 Composer 将该组件引入即可,默认已安装。 composer require hyperf/event一、概念 事件模式是一种非常适用于解耦的机制,分别存在以下 3 种角…...

MySQL 本地社区版安装(不登录) mysql官网链接

一、官网下载 官方地址 https://www.mysql.com/downloads/ 打开后先选择downloads 拉到最后选择 MySQL 社区版 然后继续选择社区版 在这此可以选择新版 选择 archives 可以选择其他版本下载 这里选择下面第一个就可以了 直接选择下载 下载后是安装包 直接双击安装 二…...

Redis Search系列 - 第三讲 拼写检查

拼写检查 - Spellchecking & Dict Spellchecking为拼写错误的搜索词提供建议。例如,术语“reids”可能是“redis”的拼写错误版本。 从v1.4开始,Redis Search可以为拼写错误的查询术语(term)生成替代的方案。拼写错误的术语是…...

Golang | Leetcode Golang题解之第492题构造矩形

题目: 题解: func constructRectangle(area int) []int {w : int(math.Sqrt(float64(area)))for area%w > 0 {w--}return []int{area / w, w} }...

Axure重要元件三——中继器函数

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:中继器函数 主要内容:Item、Reperter、TargetItem 1、中继器的函数:Item\Reperter\TargetItem Item item:获取…...

MySQL8.0.40编译安装

近期MySQL发布了8.0.40版本,与之前的版本相比,部分依赖包发生了变化,因此重新编译一版,也便于大家参考。 1. 下载源码 选择对应的版本、选择源码、操作系统 如果没有登录或者没有MySQL官网账号,可以选择只下载 2. 进…...

JavaScript 第23章:WebSocket 与实时通讯

在JavaScript中使用WebSocket进行实时通信是一个非常实用且强大的功能。下面我们将详细介绍WebSocket协议的基础知识、如何使用WebSocket对象以及如何构建一个简单的实时通信应用。 WebSocket 协议 WebSocket是一个在单个TCP连接上进行全双工通信的协议。WebSocket使得数据可…...

简单汇编教程10 数组

目录 实践:相加连续的数 数组是在内存中连续的一串变量。我这样说,可能你已经想到的大致的定义了: NUMBERS DW 34, 45, 56, 67, 75, 89 现在我们就定义了一个Number数组,里面存放的连续的六个数字:34, 45, 56, …...

Jsoup在Java中:解析京东网站数据

对于电商网站如京东来说,其页面上的数据包含了丰富的商业洞察。对于开发者而言,能够从这些网站中提取有价值的信息,进行分析和应用,无疑是一项重要的技能。本文将介绍如何使用Java中的Jsoup库来解析京东网站的数据。 Jsoup简介 …...

SQL 干货 | SQL 反连接

最强大的 SQL 功能之一是 JOIN 操作,它提供了一种优雅而简单的方法,将一个表中的每一条记录与另一个表中的每一条记录结合起来。不过,有时我们可能想从一个表中找到另一个表中没有的值。正如我们将在今天的博客文章中看到的,通过包…...

JSON 反对序列化 public final class LocalDateTime 日期格式错误

错误日志为: java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of java.time.LocalDateTime (no Creators, like default construct, exist): no String-argument constructor/factory meth…...

Java 集合

1. 集合框架概述 集合框架(Collection Framework) 是 Java 中为处理一组对象而设计的一套标准化 API,它包括一组通用的接口、实现类和算法。这些接口和类为各种数据结构和操作方法提供了统一的实现方式,使得开发者可以轻松地对数…...

爬虫日常实战

爬取美团新闻信息,此处采用两种方法实现: 注意点:因为此处的数据都是动态数据,所以一定要考虑好向下滑动数据包会更新的情况,不然就只能读取当前页即第一页数据,方法一通过更新ajax数据包网址页数&#xf…...

复写零--双指针

一&#xff1a;题目描述 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二&#xff1a;算法原理分析 三&#xff1a;代码编写 void duplicateZeros3(vector<int>& arr) {int dest -1, cur 0, n arr.size();//1.找到要复写的最后一个数字while …...

跟着小土堆学习pytorch(二)——TensorBoard和Transform

文章目录 一、TensorBoard1.1 add_scalar()1.1,1 报错&#xff1a;TypeError: MessageToJson() got an unexpected keyword argument including_default_value_fields1.1.2 图像重叠1.1.3 代码展示 1.2 add_image()1.2.1 代码 二、transform2.1 介绍——对图片进行一些变化2.2 …...

自由学习记录(10)

Sprite Packer ~Mode & 图集 packer Project Setting经常是金屋藏娇 创建的项目如果不是2d项目&#xff0c;则默认disable打包 编辑模式就是你没点运行看游戏效果&#xff0c;在狼狈敲码创对象写逻辑的那个状态&#xff0c; 运行模式从点了|>之后&#xff0c;就一直…...

Redis提供了专门的命令来实现自增操作

Redis中的自增操作并不是直接通过CAS&#xff08;Compare and Set&#xff09;操作实现的。Redis提供了专门的命令来实现自增操作&#xff0c;这些命令能够确保操作的原子性&#xff0c;而不需要显式地使用CAS机制。 Redis中的自增操作 Redis中的自增操作主要依赖于以下几个命…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...