C++| VS+QT快速入门

VS+QT

  • C++开发QT的方式
  • VS+QT和QT Creater的区别
  • VS+QT使用:入门案例——加法器
    • 创建项目
    • UI文件
    • 运行项目
    • 编辑UI界面
    • 代码交互编写
    • 中文显示乱码

C++开发QT的方式

C++开发QT有两种方式,一种是VS+QT,还有一种是QT Creater。

QT Creater的用法已经在C++学习| QT快速入门中写过了,本篇主要是说一下VS+QT的使用方法,以及该方法和QT Creater的区别。

VS+QT和QT Creater的区别

主要是讲一下VS+QT和QT Creater大体上的区别,一些具体的操作细节区别,会在下一部分的VS+QT使用上详细讲解。

VS+QT:

  • 优势:
    • VS IDE加持,写代码和Debug都很方便。
    • 熟悉过VS的话,上手写代码,安装配置什么得很方便。
  • 劣势:
    • 修改Ui文件之后,可能要先对Ui文件进行编译。
    • 提示功能不如Qt Creator那么全。
    • 对汉字支持不太好,需要做别的处理。

QTCreater:

  • 优势:
    • 实现Ui和代码快速切换。
    • 项目管理方便,可以添加pri等来管理子模块。
    • 新手上手QT来说比较友好。
    • 对汉字的支持更好。
  • 劣势:
    • Debug困难。
    • 项目需要配置一些文件的时候,会比较麻烦。

我个人体验来说,需要配置很多环境文件的项目用VS+QT比较合适,尤其是从原本VS编写的项目迁移的时候。最近需要把mfc项目重构,希望重构后界面能好看点,于是想要用QT。但是,当编写到需要配置一些环境时候,网上QT Creater相关的很少,VS相关的很多。QT Creater配置cuda等各种环境文件,很麻烦,这时候如果用VS+QT,那么配置这些东西就回到和原来项目相同的模式,只不过界面编写用QT。

VS+QT使用:入门案例——加法器

关于VS配置QT的内容,在之前我的另一个篇博客QT下载安装、VS配置QT就讲解过了。

创建项目

打开VS,选择新建项目的时候能够看到QT选项,会有很多种QT项目选择,根据自己需要看介绍选择即可。

因为我主要是使用QT做桌面应用,就选择QT Widgets Application进行创建。

在这里插入图片描述
会进入QT应用程序创建的界面。

在这里插入图片描述
后续剩下步骤,命名好,默认的就行。

在这里插入图片描述

UI文件

项目文件介绍:新建项目后,可以在解决方案中看到所有相关的文件,其中的ui是QT界面相关的文件,qrc则是QT资源相关管理文件。

在这里插入图片描述
跳转QT Designer:通常双击即可跳转到QT Designer进行可视化编辑界面,但是可能会遇到双击打不开的情况,例如下图。

在这里插入图片描述
遇到打不开的情况可能是打开方式出现了问题,可以常试以下两种方法。

第一种方法,打开方式设置为QT Designer为默认值。

在这里插入图片描述
如果QT Designer设置为了默认值还是不行,可能是QT Designer的路径有问题。

第二种方法,自行添加一个新的QT Designer,路径为自己安装QT路径下的msvc后面bin中QT Designer的路径(我的路径为E:\QT\6.6.1\msvc2019_64\bin\designer.exe),然后在给个不同于QT Designer的友好名称,我给了个QT Designer的中文翻译“QT设计师”作为友好名称。

在这里插入图片描述
这时候双击ui文件就会自动跳转到QT Designer了,界面和QT Creater的设计界面差不多。

在这里插入图片描述

运行项目

直接运行即可。

在这里插入图片描述

如果报错没法找到QWidget等QT相关的类,可以右键项目->属性->C/C+±>常规->附加包含目录,添加QT的include路径(我的路径为E:\QT\6.6.1\msvc2019_64\include)。

注意自己的msvc版本,由于我安装的QT6配置的是msvc2019版本,意味着VS最少要2019,所以我原本一直用的VS2017没法运行成功,我又重新安装了VS2022。VS版本换了后,QT相关的配置方案和之前是一样的没有变化。

编辑UI界面

在QT Designer编辑加法器的UI界面,通过拖拽控件到界面上,最终形成如下界面。不同控件可以双击对象检查器中控件对象修改objectname,来让对象名字更加直观,方便代码操控。

在这里插入图片描述

代码交互编写

思路:为加法按钮添加槽函数,QT Creater中可以用“转到槽”来完成自动关联,但是VS+QT是没有“转到槽”的选项的,所以需要用connect手动关联槽函数。

可能会遇到的几个问题

  • VS中代码不识别QT里面的控件对象名字:先点击ui文件右键选择“编译”,再点击项目右键选择“重新扫描解决方案”,注意不是“重新生成解决方案”。
  • connect手动关联失效:要把槽函数写在“public slots:”后面,不能像QT Creater那样只写在“public:”后面。
  • VS+QT操作ui类的成员:ui在VS+QT中是变量,而在QT Creater中是指针,所以操作里面的成员的时候,QT Creater用的“->”,而VS+QT用的是“.”。

完整的代码
Test.h

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_Test.h"

class Test : public QMainWindow
{
    Q_OBJECT

public:
    Test(QWidget *parent = nullptr);
    ~Test();
public slots:
    void onAddButtonClicked();// 加法按钮的槽函数声明

private:
    Ui::TestClass ui;
};

Test.cpp

#include "Test.h"

Test::Test(QWidget* parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);// 在QT Creater中,ui是指针只能用->操作。
	this->setWindowTitle("加法器");
	// 手动关联
	connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(onAddButtonClicked()));
}

Test::~Test()
{}

void Test::onAddButtonClicked()
{
	// 获取lineedit的数据
	QString a_str = ui.input1->text();
	QString b_str = ui.input2->text();
	// 把QString转为int
	int a = a_str.toInt();
	int b = b_str.toInt();
	// a和b相加
	int ans = a + b;
	// 设置结果显示在label上
	ui.label->setText("结果:" + QString::number(ans, 10));
}

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

中文显示乱码

产生原因:Qt creator是跨平台的,所以编码格式默认为utf-8格。但是VS不是跨平台的,是windows下的原生IDE,windows的系统编码为GBK格式。VS打开Qt creator编写的文件的时候,按照utf-8编码,gbk来解码,编码和解码不对应,需要做得就是统一两者的编码。英文不会乱码,是因为UTF-8和GB2312在单字节字符部分是兼容的。

解决方案:网上相关的方法有很多种,例如修改高级保存选项为“utf8带签名:、添加“#pragma execution_character_set(“utf-8”)”在头文件、安装扩展Force URF-8 with BOM等。这些方法我在VS2022+QT6上面试过都不行,但是后来我用了安装扩展Format on Save for VS2022成功。
在这里插入图片描述
安装后在工具->选项中,进行设置utf8。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java Lambda表达式:简化编程,提高效率

Java Lambda表达式&#xff1a;简化编程&#xff0c;提高效率 1. 使用Lambda表达式进行集合遍历1.1 未使用Lambda表达式&#xff1a;1.2 使用Lambda表达式&#xff1a; 2. 使用Lambda表达式进行排序2.1 未使用Lambda表达式&#xff1a;2.2 使用Lambda表达式&#xff1a; 3. 使用…

Sora:将文本转化为视频的创新之旅

一.能力 我们正致力于让 AI 掌握理解和模拟物理世界动态的能力&#xff0c;旨在培养能够协助人们解决现实世界互动问题的模型。 介绍 Sora——我们开发的文本到视频转换模型。Sora 能够根据用户的输入提示&#xff0c;生成最长达一分钟的高质量视频内容。 目前&#xff0c;Sora…

MCU中断控制

目录 一、中断相关基础知识 1、NVIC&#xff1a;嵌套向量中断控制器 2、可屏蔽中断和不可屏蔽中断的区别 3、中断优先级 4、常见特殊中断 二、中断相关寄存器 三、中断使用步骤&#xff1a; 一、中断相关基础知识 1、NVIC&#xff1a;嵌套向量中断控制器 (1) 它是内核的…

1.8 NLP自然语言处理

NLP自然语言处理 更多内容&#xff0c;请关注&#xff1a; github&#xff1a;https://github.com/gotonote/Autopilot-Notes.git 一、简介 seq2seq(Sequence to Sequence)是一种输入不定长序列&#xff0c;产生不定长序列的模型&#xff0c;典型的处理任务是机器翻译&#…

2.15练习

选择题 1. B2. B3. C4. D5. A6. B7. C8. B9. D10. B11. A12. B 填空题 1. a b c 2.string s: I like it. String t:A like it. 3. 30 10 30 n Learning

【复合多尺度熵与特征提取】一文看懂“复合多尺度熵”——复合多尺度样本熵、模糊熵、排列熵、包络熵、功率谱熵、能量熵、奇异谱熵及其MATLAB实现

在上一篇文章中&#xff0c;我们讲了多尺度熵的原理及MATLAB实现。 本篇要讲的是多尺度熵的一个改进特征提取方法——复合多尺度熵&#xff08;Composite Multiscale Entropy, CMSE&#xff09;。复合多尺度熵方法不仅继承了多尺度熵在揭示时间序列多尺度复杂性方面的优势&…

力扣题目训练(12)

2024年2月5日力扣题目训练 2024年2月5日力扣题目训练476. 数字的补数482. 密钥格式化485. 最大连续 1 的个数148. 排序链表164. 最大间距 2024年2月5日力扣题目训练 2024年2月5日第十二天编程训练&#xff0c;今天主要是进行一些题训练&#xff0c;包括简单题3道、中等题2道和…

c高级day4作业

终端输入一个字符&#xff0c;判断是大写字母小写字母还是数字字符。 #!/bin/bash read -p "input字符--->" a case $a in[[:upper:]])echo 大写字母$a;;[[:lower:]])echo 小写字母$a;;[0-9])echo 数字字符$a;;*)echo "error" esac终端输入年月&#x…

GIS 基于 MCDM-AHP 方法研究潜在风力发电厂区域

随着全球人口的迅速增长、现有不可再生能源的不足以及工业的快速发展,人们对可再生能源的兴趣与日俱增。除了化石燃料的有限供应外,由于无法避免其对环境造成的破坏,人们开始转向替代能源。风能是最具商业价值的能源之一,既环保又可持续。然而,为了使风力发电厂发挥最大效…

⭐北邮复试刷题103. 二叉树的锯齿形层序遍历

103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 示例 1&#xff1a;输入&#xff1a…

链式结构实现队列

链式结构实现队列 1.队列1.1队列的概念及结构1.2队列的实现 2. 队列的各种函数实现3. 队列的全部代码实现 1.队列 1.1队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(Fi…

深入解析域名短链接生成原理及其在Python/Flask中的实现策略:一篇全面的指南与代码示例

为了构建一个高效且用户友好的域名短链服务&#xff0c;我们可以将项目精简为以下核心功能板块&#xff1a; 1. 用户管理 注册与登录&#xff1a;允许用户创建账户并登录系统。 这部分内容可以参考另一片文章实现&#xff1a; 快速实现用户认证&#xff1a;使用Python和Flask…

Aster实现一台电脑当两台使——副屏使用独立win账号

前言&#xff1a;笔者每年回家&#xff0c;都面临着想要和小伙伴一起玩游戏&#xff0c;但小伙伴没有电脑/只有低配电脑的问题。与此同时&#xff0c;笔者自身的电脑是高配置的电脑&#xff0c;因此笔者想到&#xff0c;能否在自己的电脑上运行游戏&#xff0c;在小伙伴的电脑上…

得物面试:Redis用哈希槽,而不是一致性哈希,为什么?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; Redis为何用哈希槽而不用一致性哈希&#xff1f; 最近…

智能传感器阅读笔记-智能传感器的发展历程、发展趋势及方向

智能传感器的发展历程 第一代智能传感器 第一代智能传感器是数字式传感器&#xff0c;指改造A/D转换模块&#xff0c;并采用数字技术进行信号处理&#xff0c;使输出信号为数字信号&#xff08;或数字编码&#xff09;的传感器&#xff0c;主要由放大器、A/D转换模块、微处理…

解决STM32MP157开发板密码登录问题

开发板密码登录问题是很多人遇到的问题&#xff0c;网上有很多帖子&#xff0c;我也参考过&#xff0c;不太适用&#xff0c;很复杂&#xff0c;甚至会被误导&#xff0c;我差点连ubuntu虚拟机都无法登录了。有的密码匹配&#xff0c;有的取消不了密码。 1、密码配置&#xff…

ABC341 A-F

Toyota Programming Contest 2024#2&#xff08;AtCoder Beginner Contest 341&#xff09; - AtCoder B读不懂题卡了&#xff0c;F读假题卡了&#xff0c;开题开慢了rank了 A - Print 341 题意&#xff1a; 打印一串交替出现的包含N个0&#xff0c;N1个1的01串 代码&…

【案例8】用户中心实现涉及内容和过程

图1 如图1是用盒子模型内容实现的&#xff0c;但是需要了解一些内容。 一.内容知识引入 1.内边距属性&#xff08;padding&#xff09; 为了调整盒子在网页中的显示位置&#xff0c;常常需要为元素设置内边距。内边距也被称为内填充&#xff0c;是指元素内容和边框之间的距离…

Windows程序互斥锁 - 一个程序同时仅允许运行一个实例

Windows程序互斥锁 - 一个程序同时仅允许运行一个实例 前言 鉴于应用逻辑需要&#xff0c;有些Windows应用同时只能运行一个实例。例如&#xff1a;一个电脑只能同时运行一个微信&#xff08;手速快了当我没说&#xff0c;不信你去试试&#xff09;。 怎么实现呢&#xff1f…

Unity 减低GC和优化

文章目录 在Unity中&#xff0c;垃圾收集&#xff08;Garbage Collection, GC&#xff09;是一项重要的内存管理机制&#xff0c;但过度的GC活动可能会导致性能瓶颈。优化Unity项目中的GC涉及减少不必要的对象分配和生命周期管理。以下列举了五个实例来详细说明如何降低GC负担并…