VS2022+qt5.12.3环境配置以及项目创建
下载和安装Qt
(1)通过这个路径下载https://download.qt.io/archive/qt/5.12/5.12.3/
下载完成后,点击运行,如果有Qt账号,直接登录就可以了,如果没有可以在下面注册一个,然后点Next(如果不想填写,请先断网,然后重新打开安装程序)
选择如下组件:
下一步,然后等待安装完成。
配置Qt路径
找到自己安装的Qt的路径,进入后找到如下几个bin的位置并依次添加到系统环境变量的path中去:
下载Qt tools
在Vs的扩展->管理扩展中搜索Qt找到要下载的扩展工具(下载好之后需要重新打开 Vs)
下载好之后记得关闭Qt Tools的自动更新(如下图),否则整个项目都会出现奇奇怪怪的错误。
添加版本:扩展->qt vs tools->Options
注意,如果在创建qt项目的时候提示register at least one qt version,一定看看default这里有没有选中。
创建Qt项目
构造一个Qt Widgets项目,首先,依次按照下图建立一个新的Qt项目,一般都继承自QWidget,这是Qt所有窗口类的基类。
按照下图顺序:
至此,项目创建完成。
窗口基本属性设置&调整
创建析构函数
在这之前我们先干一件事——写好析构函数以避免内存外溢。
通过如上方式构造的一个窗口类中,一开始就有一个私有成员
乍一看貌似没有指针成员析构与否并不影响,但是在之后添加控件时我们往往以指针的形式来定义它们,这时候挨个析构过去相当麻烦,所以Qt的这个ui变量如果写成指针的形式,然后再在析构中释放ui指针的内存即可自动释放掉该Qt类下的所有指针成员的内存。
将上述代码修改为:
#pragma once #include <QtWidgets/QWidget> #include "ui_qtwidgetsapplication1.h" class QtWidgetsApplication1 : public QWidget { Q_OBJECT public: QtWidgetsApplication1(QWidget *parent = nullptr); ~QtWidgetsApplication1(); private: Ui::QtWidgetsApplication1Class *ui; };
对应的cpp:
#include "qtwidgetsapplication1.h" QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent) : QWidget(parent) { ui->setupUi(this); } QtWidgetsApplication1::~QtWidgetsApplication1() { delete ui; ui = nullptr; }
设置窗口标题和大小
#include "qtwidgetsapplication1.h" QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent) : QWidget(parent) { ui->setupUi(this); // 设置窗口标题 setWindowTitle("测试窗口"); // 重设大小 resize(400,500); } QtWidgetsApplication1::~QtWidgetsApplication1() { delete ui; ui = nullptr; }
效果:
中文乱码问题解决
在这个环境里如果出现了中文乱码,如下图解决:
然后在.h文件中添加:
#if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") #endif
所以这个示例的头文件代码为:
#pragma once #include <QtWidgets/QWidget> #include "ui_qtwidgetsapplication1.h" #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") #endif class QtWidgetsApplication1 : public QWidget { Q_OBJECT public: QtWidgetsApplication1(QWidget *parent = nullptr); ~QtWidgetsApplication1(); private: Ui::QtWidgetsApplication1Class *ui; };
窗口初始位置的移动
窗口初始生成位置的移动依托于move函数,注意,这是相对于父窗口来说的,按照当前的示例,其父窗口就是电脑屏幕,所以是以屏幕的左上角为原点移动的
#include "qtwidgetsapplication1.h" QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent) : QWidget(parent) { ui->setupUi(this); // 设置窗口标题 setWindowTitle("测试窗口"); // 重设大小 resize(400,500); // x轴向右移动500,y轴向下移动200 move(500,200); } QtWidgetsApplication1::~QtWidgetsApplication1() { delete ui; ui = nullptr; }
窗口背景颜色设置
函数原型:
setStyleSheet(const QString &styleSheet);
这里设置背景色用到的sheet写法为:"QXx { background-color : QColor;}"
其中:QXx为要设置的控件的Qt基类,比如这个窗口继承自QLabel那就写成"QLabel { backgroung-color : QColor;}"。而QColor指Qt中表示颜色的数值。
其中常用的QColor表示法有三种:
1.使用系统预置颜色
如:"QLabel { backgroung-color : green;}"、"QLabel { backgroung-color : blue;}"等
这里可以用的颜色有:red、green、blue、yellow、gray、black、white、orange、pink、brown、beige(米白色)、aqua(水绿色)、tan(褐色)、silver、gold、skyblue等等
以米白色为例:
#include "qtwidgetsapplication1.h" QtWidgetsApplication1::QtWidgetsApplication1(QWidget* parent) : QWidget(parent) { ui->setupUi(this); // 设置窗口标题 setWindowTitle("测试窗口"); // 重设大小 resize(400,500); // x轴向右移动500,y轴向下移动200 move(500,200); // 设置背景色 setStyleSheet("QWidget{background-color:beige}"); } QtWidgetsApplication1::~QtWidgetsApplication1() { delete ui; ui = nullptr; }
效果:
注意:当你写的是不存在的预置颜色会默认设置成黑色
使用RGB三原色表示法(rgba(r, g, b))
例:"QLabel { backgroung-color : rgba(174, 221, 129);}"
使用十六进制表示颜色
如:"QLabel { backgroung-color : #3697ad;}"
参考:https://blog.csdn.net/m0_51510934/article/details/122524346