Windows 基于Visual Studio 开发Qt 6 注意事项

前提条件:

1、Visual  Studio 2022 社区版(免费版)

2、Qt-6.5.1版本

Qt Vistual Studio Tools下载

先打开Visual Studio 2022 社区版 :

点击扩展-》管理拓展按钮后,在搜索框中输入Qt,点击这里第一个扩展安装。

 Qt Visual Studio Tools 拓展插件安装成功后,在拓展菜单项多出一个菜单选项"Qt VS Tools"

Vistual Studio 2022 社区版配置Qt 6

进入Vistual Studio 2022 点击扩展->Qt VS Tool->Qt Versions

进入Qt Versions后, 点击Qt -> Versions。

配置Qt 6 地址:D:\Qt\6.5.1\msvc2019_64\bin\

 Vistual Studio 2022 创建Qt 6 项目

创建一个Qt项目。

点击下一步:

 

 

点击下一步:

 

Qt 应用程序入口: main.cpp

Qt 应用UI设计文件:QtWidgetsApplication_One.ui

 Qt 应用组件对应头文件:QtWidgetsApplication_One.h

Qt 应用组件对应Class 文件:QtWidgetsApplication_One.cpp

Qt 应用继承基础类:QMainWindows

Qt 应用资源文件:QtWidgetsApplication_One.qrc

点击Finsh 按钮:

运行效果展示:

Vistual Studio 2022 无法正常打开Qt  项目 中的*.UI文件 

当我们双击*.UI文件,会出现下面这样的弹窗。 

如何解决此类问题?

请按照如下步骤进行:

 

 

右键.ui文件 ===> 打开方式 ===> 添加  ===> 找到对应文件下的.exe文件 ===> 随便取名 

UI 效果展示:

Vistual Studio 2022 社区版 Qt 项目 涉及简单登入页面

在QtWidgetsApplication_One.ui 文件中添加如下组件清单:

3 个Label 标签

2 个Line Edit 输入文本框

2 个Push Button 按钮

1 个CheckBox Button 按钮

QtWidgetsApplication_One.ui 在设计器中的展示:

点击Ctral + S 保存快捷键,再次运行QtWidgetsApplication_One 项目的main.cpp 方法。

 

Vistual Studio 2022 社区版 Qt 项目 涉及多个UI 页面

在实际Qt 项目开发中,需要使用多个UI 页面以及对应的头文件和Class 文件。

Qt 项目-》Form Files 右击

 

我在这里新增addFrom.ui 文件,且原型设计如下图所示:

 如何解决基于*.UI 文件生成头文件和Class文件?

请按照如下步骤进行:

第一步:在Qt 6 项目中选择需要进行编译的UI 文件并点击编译,我这里选择的是自定义addFrom.ui 文件。

编译的结果:将在Qt 项目 所占目录中 ->X64-》Debug ->uic 文件夹目录中生成一个名为:ui_addFrom.h 的头文件。

查看文件内容(ui_addFrom.h)

/********************************************************************************
** Form generated from reading UI file 'addFrom.ui'
**
** Created by: Qt User Interface Compiler version 6.5.1
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/#ifndef UI_ADDFROM_H
#define UI_ADDFROM_H#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QRadioButton>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QWidget>QT_BEGIN_NAMESPACEclass Ui_Form
{
public:QLabel *label;QLabel *label_2;QLineEdit *lineEdit;QLabel *label_3;QLineEdit *lineEdit_2;QLabel *label_4;QLineEdit *lineEdit_3;QLabel *label_5;QRadioButton *radioButton;QRadioButton *radioButton_2;QLabel *label_6;QTextEdit *textEdit;QPushButton *pushButton;void setupUi(QWidget *Form){if (Form->objectName().isEmpty())Form->setObjectName("Form");Form->resize(650, 455);label = new QLabel(Form);label->setObjectName("label");label->setGeometry(QRect(210, 50, 54, 16));label_2 = new QLabel(Form);label_2->setObjectName("label_2");label_2->setGeometry(QRect(140, 90, 54, 16));lineEdit = new QLineEdit(Form);lineEdit->setObjectName("lineEdit");lineEdit->setGeometry(QRect(210, 90, 113, 20));label_3 = new QLabel(Form);label_3->setObjectName("label_3");label_3->setGeometry(QRect(140, 130, 54, 16));lineEdit_2 = new QLineEdit(Form);lineEdit_2->setObjectName("lineEdit_2");lineEdit_2->setGeometry(QRect(210, 130, 113, 20));label_4 = new QLabel(Form);label_4->setObjectName("label_4");label_4->setGeometry(QRect(140, 170, 54, 16));lineEdit_3 = new QLineEdit(Form);lineEdit_3->setObjectName("lineEdit_3");lineEdit_3->setGeometry(QRect(210, 170, 113, 20));label_5 = new QLabel(Form);label_5->setObjectName("label_5");label_5->setGeometry(QRect(140, 210, 54, 16));radioButton = new QRadioButton(Form);radioButton->setObjectName("radioButton");radioButton->setGeometry(QRect(210, 210, 95, 20));radioButton_2 = new QRadioButton(Form);radioButton_2->setObjectName("radioButton_2");radioButton_2->setGeometry(QRect(290, 210, 95, 20));label_6 = new QLabel(Form);label_6->setObjectName("label_6");label_6->setGeometry(QRect(140, 250, 54, 16));textEdit = new QTextEdit(Form);textEdit->setObjectName("textEdit");textEdit->setGeometry(QRect(140, 270, 191, 81));pushButton = new QPushButton(Form);pushButton->setObjectName("pushButton");pushButton->setGeometry(QRect(210, 380, 75, 24));retranslateUi(Form);QMetaObject::connectSlotsByName(Form);} // setupUivoid retranslateUi(QWidget *Form){Form->setWindowTitle(QCoreApplication::translate("Form", "Form", nullptr));label->setText(QCoreApplication::translate("Form", "\347\224\250\346\210\267\346\226\260\345\242\236", nullptr));label_2->setText(QCoreApplication::translate("Form", "\345\247\223\345\220\215", nullptr));label_3->setText(QCoreApplication::translate("Form", "\345\271\264\351\276\204", nullptr));label_4->setText(QCoreApplication::translate("Form", "\345\256\266\345\272\255\344\275\217\345\235\200", nullptr));label_5->setText(QCoreApplication::translate("Form", "\346\200\247\345\210\253:", nullptr));radioButton->setText(QCoreApplication::translate("Form", "\347\224\267", nullptr));radioButton_2->setText(QCoreApplication::translate("Form", "\345\245\263", nullptr));label_6->setText(QCoreApplication::translate("Form", "\344\270\252\344\272\272\347\256\200\344\273\213\357\274\232", nullptr));pushButton->setText(QCoreApplication::translate("Form", "\344\277\235\345\255\230", nullptr));} // retranslateUi};namespace Ui {class Form: public Ui_Form {};
} // namespace UiQT_END_NAMESPACE#endif // UI_ADDFROM_H

重点: 

1、声明一个命名空间:namespae Ui。

2、定义自定义addFrom.ui 对应的实现类:Ui_From。

3、定义类Ui_From 在命名空间Ui 访问别名 From。 

第二步:在Qt 项目->Header Files 添加addFrom.ui 对应的AddFrom.h 头文件。

主要用途:引用"ui_addFrom.h" 头文件中对addFrom.ui 实现类:Ui::Form ui

addFrom.h 头文件 源码:

#pragma once#include <QtWidgets/QMainWindow>
#include "ui_addFrom.h"class AddFrom : public QMainWindow
{Q_OBJECTpublic:AddFrom(QWidget* parent = nullptr);~AddFrom();private:Ui::Form ui;
};

 第三步:在Qt 项目->Source Files 添加addFrom.h 对应的实现类addFrom.cpp。

#include "addFrom.h"AddFrom::AddFrom(QWidget* parent): QMainWindow(parent)
{ui.setupUi(this);
}AddFrom::~AddFrom()
{}

项目整体结构:

第四步:在程序入库main.cpp 文件替换为addFrom.h 文件

#include "QtWidgetsApplication_One.h"
#include "addFrom.h"
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);AddFrom w;w.show();return a.exec();
}

效果截图 :

Vistual Studio 2022 社区版 Qt 项目 涉及多个UI 页面跳转

在上一个案列中,我们涉及了登入页面和注册页面,如何把两个页面串联, 我们将通过槽和函数实现 ,通过登入页面的登入按钮跳转至注册页面。

第一步:在QtWidgetsApplication_One.h 头文件中定义槽函数:

 // 定义槽函数
public slots:
    void gotoFrom();

QtWidgetsApplication_One.h  源文件:

#pragma once#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication_One.h"class QtWidgetsApplication_One : public QMainWindow
{Q_OBJECTpublic:QtWidgetsApplication_One(QWidget *parent = nullptr);~QtWidgetsApplication_One();// 定义槽函数
public slots:void gotoFrom();private:Ui::QtWidgetsApplication_OneClass ui;
};

 第二步:在QtWidgetsApplication_One.h 头文件对应QtWidgetsApplication_One.cpp 文件,实现PushButton 信号事件与槽函数绑定。

核心代码片段:
在初始化构造函数中完成PushButton 信号事件与自定义槽函数绑定。
QtWidgetsApplication_One::QtWidgetsApplication_One(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);//连接pushbutton的clicked()信号到自定义的gotoFrom()槽connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(gotoFrom()));
}实现在QtWidgetsApplication_One.h 自定义槽函数gotoFrom()
void QtWidgetsApplication_One::gotoFrom() {qDebug() << "pushButton 按钮点击事件触发 ";
}//  自定义槽函数gotoFrom():仅仅涉及控制台字符串输出,暂时不涉及页面跳转。

QtWidgetsApplication_One.cpp 控制台输出字符串源码。

#include "QtWidgetsApplication_One.h"
#include <QDebug>QtWidgetsApplication_One::QtWidgetsApplication_One(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);//连接pushbutton的clicked()信号到自定义的gotoFrom()槽connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(gotoFrom()));
}QtWidgetsApplication_One::~QtWidgetsApplication_One()
{}void QtWidgetsApplication_One::gotoFrom() {qDebug() << "pushButton 按钮点击事件触发 ";
}

效果展示:

 美中不足:输出的汉子显示乱码。

 第三步:在QtWidgetsApplication_One.cpp 文件中,添加对跳转页面头文件的依赖("addFrom.h")。并在槽函数gotoFrom()中实现页面跳转。

核心代码片段:
1、添加跳转页面的头文件
#include "addFrom.h"
2、在自定义槽函数实现页面跳转
void QtWidgetsApplication_One::gotoFrom() {qDebug() << "pushButton 按钮点击事件触发 ";// 当前页面关闭this->close();// 跳转页面显示AddFrom* from = new AddFrom();from->show();
}

QtWidgetsApplication_One.cpp 页面跳转。

#include "QtWidgetsApplication_One.h"
#include "addFrom.h"
#include <QDebug>QtWidgetsApplication_One::QtWidgetsApplication_One(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);//连接pushbutton的clicked()信号到自定义的gotoFrom()槽connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(gotoFrom()));
}QtWidgetsApplication_One::~QtWidgetsApplication_One()
{}void QtWidgetsApplication_One::gotoFrom() {qDebug() << "pushButton 按钮点击事件触发 ";// 当前页面关闭this->close();// 跳转页面显示AddFrom* from = new AddFrom();from->show();
}

效果展示:

 

至此,Visual Studio 2022 + Qt 6 在Windows 开发环境注意细节就 讲这么多了。 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iterator和generator

iterator和generator iterator es6: let/const ...展开 迭代器 是一种机制&#xff0c;比如在控制台输出Iterator是没有这个类的&#xff0c;为不同的数据结构提供迭代循环的机制。 迭代器对象&#xff1a;具备next方法&#xff0c;next能够对你指定的数据进行迭代循环&#x…

gogs git 服务器极速搭建

背景 小型团队合作中&#xff0c;需要代码托管在内网&#xff0c;gitlab 等搭建比较复杂&#xff0c;经过一番搜寻发现gogs满足需求 基本用户管理后台管理面板&#xff0c;能在web端查看管理安装配置极简 安装配置 gogs是支持多个平台&#xff0c;这里我们选择ubuntu 1.下载git…

2023-9-23 合并果子

题目链接&#xff1a;合并果子 #include <iostream> #include <algorithm> #include <queue>using namespace std;int main() {int n;cin >> n;priority_queue<int, vector<int>, greater<int>> heap;for(int i 0; i < n; i){in…

Tomcat部署、优化、以及操作练习

一.Tomcat的基本介绍 1.1.Tomcat是什么&#xff1f; Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP程序的首选。一般来说&#xff0c;T…

BUUCTF:[MRCTF2020]套娃

查看源码发现 PHP非法参数名传参问题&#xff0c;详细请参考我的这篇文章&#xff1a;谈一谈PHP中关于非法参数名传参问题 正则这里绕过使用%0a换行符绕过&#xff0c;payload: /?b.u.p.t23333%0a 得到下一步信息&#xff1a;secrettw.php 注释中的是JsFuck&#xff0c;用这…

【李沐深度学习笔记】数据操作实现

课程地址 数据操作实现p2 数据操作 首先导入PyTorch包&#xff08;import torch)&#xff0c;虽然叫PyTorch&#xff0c;但实际上要导入torch。 import torch张量 张量表示的是一个数值组成的数组&#xff0c;这个数组可以有很多个维度。 # 生成0-11的顺序序列构成的一维…

一篇文章让你学会什么是哈希

一篇文章让你学会什么是哈希 哈希概念哈希冲突哈希函数1. 直接定址法2. 除留余数法3. 平方取中法4. 折叠法5. 随机数法6. 数学分析法 哈希冲突解决1. 闭散列1.1 线性探测1.2 二次探测 2. 开散列 开散列和闭散列对比 哈希概念 哈希在C中有广泛的应用&#xff0c;它是一种用于快…

【算法与数据结构】JavaScript实现十大排序算法(二)

文章目录 关于排序算法快速排序堆排序计数排序桶排序基数排序 关于排序算法 稳定排序&#xff1a; 在排序过程中具有相同键值的元素&#xff0c;在排序之后仍然保持相对的原始顺序。意思就是说&#xff0c;现在有两个元素a和b&#xff0c;a排在b的前面&#xff0c;且ab&#xf…

外包干了2个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

竞赛选题 基于深度学习的行人重识别(person reid)

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的行人重识别 该项目较为新颖&#xff0c;适合…

前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— JS基础(四)

开始吧&#xff0c;做时间的主人&#xff01; 把时间分给睡眠&#xff0c;分给书籍&#xff0c;分给运动&#xff0c; 分给花鸟树木和山川湖海&#xff0c; 分给你对这个世界的热爱&#xff0c; 而不是将自己浪费在无聊的人和事上。 思维导图 函数 为什么需要函数 <!DO…

C++之类和函数权限访问总结(二百二十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

黑马JVM总结(十七)

&#xff08;1&#xff09;G1_简介 下面介绍一种Grabage one的垃圾回收器&#xff0c;在jdk9的时候称为默认的回收器&#xff0c;废除了之前的CMS垃圾回收器&#xff0c;它的内部也是并发的垃圾回收器 我们可以想到堆内存过大&#xff0c;肯定会导致回收速度变慢&#xff0c;因…

时序预测 | MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测

时序预测 | MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测 目录 时序预测 | MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现NGO-GRU北方苍鹰算法优化门控循环单元时间序列预测&#…

Matlab编程中函数的重命名方法

Matlab编程中函数的重命名方法 在进行matlab编程时候&#xff0c;有时需要根据自己的习惯&#xff0c;需要对函数重命名。本文简要介绍重命名的方法。 一、重命名的方法 通过和赋值号实现&#xff0c;如下所示&#xff1a; 新函数名原函数名二、具体举例 clc clear all %将…

C 初级学习笔记(基础)

目录 1.预处理器指令 预定义宏 预处理器运算符 &#xff08;\&#xff09; 参数化的宏 头文件 .h 引用头文件操作 2.函数&#xff08;标识符&关键字&运算符&#xff09;存储类 函数参数 a. 标识符&关键字 b. 运算符&#xff08;算术、关系、逻辑、位、赋…

手动部署 OceanBase 集群

手动部署一个 OB 单副本集群&#xff0c;包括一个 OBProxy 节点 部署环境 服务器信息 IP地址 192.168.0.26 网卡名 ifcfg-enp1s0 OS Kylin Linux Advanced Server release V10 CPU 8C 内存 32G 磁盘1 本地盘 /data/1 磁盘2 本地盘 /data/log1 机器和角色划分 …

软件设计模式

1.UML 1.1类图表示法 uml类图中&#xff0c;类使用包含类名、属性、方法 属性或方法前的加好和减号表示了这个方法的可见性&#xff0c;可见性的符号有三种&#xff1a; 表示public -表示private #表示protected 1.2 类与类之间关系 关联关系 单向关联 双向关系 自关联 聚合关…

WebRTC系列--sdp协商中的answer编解码协商过程

关于createAnswer的流程在前面的文章WebRTC系列-SDP之CreateAnswer这篇文章中有详细的分析。 这篇文章主要对于MediaSessionDescriptionFactory的AddAudioContentForAnswer做详细的分析,也就是说对于音频编码的匹配也是在这个方法里实现: 首先主要的函数调用如下图: 这篇文…

LabVIEW崩溃问题解决方法

LabVIEW崩溃问题解决方法 LabVIEW在运行中出现崩溃的情况&#xff0c;确实让人很崩溃。不过按照下面的方法可以逐步排查解决。 在LabVIEW开发环境中浏览时&#xff0c;LabVIEW崩溃并显示以下错误&#xff1a; 解决方案 LabVIEW内部错误和崩溃的初步故障排除步骤&#xff1a;…