Qt开发遇到的坑---kalrry
- 一、依赖引入坑
- 二、Qt在Debug时报错
- 三、Qt+MSVC编译后中文乱码
- 四、不能将const char*类型的值分配到const* 类型的实体
- 五、debug编译后再发布程序无法运行
- 六、Qt 环境配置提示警告
- 七、Qt5初次导入msvc2017_64编译器遇到的问题记录
- 八、Qt通过Debug编译后再发布,程序报错
- 九、Qt实现文件上传下载
- 十、QT之UI设计与运行后窗口显示不一致
- 十一、QT的zero as null pointer constant警告
- 十二、QT之常用方法记录(C++)
- 十三、QT之开发技术集合(含其他)
- 十四、常用类型转换
- 十五、Qt初始化加载等待页面
- 十六、Qt连接数据库
- 十七、大佬博客
- 十八、技术/插件网站
- 十九、通信/协议/解析
- 二十、Ubuntu_22.4安装Qt
- 二十一、解决QT 编译QWebEngineWidgets错误
一、依赖引入坑
.pro文件中增加引入
//$$quote()坑
//这里的$$quote()是当路径中有空格时候用此方式引入,没有空格可直接引用
//简单理解,当路径有空格需用$$quote方式引用,不然Qt无法识别
INCLUDEPATH += $$quote(D:\ProgramFiles\UG\NX 10.0\UGOPEN) //必须引入
INCLUDEPATH += $$quote(D:\ProgramFiles\UG\NX 10.0\UGOPENPP) //视情况而定
//凡是程序需要的即使在UGOPEN里包含,也必须用LIBS引入详细lib库名称,否则会报错
LIBS += $$quote(D:\ProgramFiles\UG\NX 10.0\UGOPEN\libufun.lib)
LIBS += $$quote(D:\ProgramFiles\UG\NX 10.0\UGOPEN\libufun_cae.lib)
LIBS += ......
//UGOPEN文件下有多个lib静态库不知道的情况下最好全引入,如果知道引用的具体名字,可按需引入
二、Qt在Debug时报错
1、编译器是 MSVC 还是 MinGW
遇到上述问题,其实是编译器问题,因为 MSVC 与 MinGW 编译出来的库文件存在兼容性问题,当你的项目使用 MinGW 编译的使用,想要用一个 MSVC 编译生成的库时就会出现如上报错。
该错误说后面这一串东西没定义,但我们按住 Ctrl 点进去发现可以正常链接到,所以并不是我们引用问题。
原因是 UG 的库文件都来自 MSVC 编译的,所以 Qt 在 Debug 时候的编译器要配置成 MSVC 才可以正常识别。
2、编译器 32位 还是 64位
传送门
MSVC 32位 报错就换 MSVC 64位,反之
三、Qt+MSVC编译后中文乱码
在Qt头文件中添加如下代码即可解决
该代码仅支持VS环境
但我们发现在QT中也管用,原因可能就是我们最终是Qt+msvc编译的,可能间接性属于vs环境
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")// 该指令仅支持VS环境(但在QT中不知道为什么还管用)
#endif
四、不能将const char类型的值分配到const 类型的实体
用MSVC编译时候遇到如上问题
char* Height = "100"; //报错
char* Diam = (char*)"100"; //用(char*)强制转换后可用,虽然还有警告
五、debug编译后再发布程序无法运行
报如下错误
解决办法:
用release模式编译后发布,居然不报错了,虽然很蒙,但是能跑就行
六、Qt 环境配置提示警告
警告一、
Qt 环境配置提示警告Qt Cmake configuration has no path to a C++ compiler set, even though the toolkit has a v
进入Qt->工具->选项->Kits->构建套件(Kit)窗口后
发现黄色警告
Qt Cmake configuration has no path to a C++ compiler set, even though the toolkit has a valid tool chain
Qt Cmake配置没有到c++编译器集的路径,即使工具箱有一个有效的工具链
解决方案:
进入vs安装目录 我这里是 D:\Program Files\Microsoft Visual Studio\Common7\Tools
运行下面目录下的 vsvars32.bat 脚本,2017以后版本执行 VsDevCmd.bat 脚本即可
进一步解释:
VsDevCmd.bat 设置 Visual Studio 相关的环境变量,这些变量是编译、链接和构建命令行上的应用程序所必需的。
vs2017之后使用的都是VsDevCmd.bat
vs2015及以前使用的是vsvars32.bat
此时会发现C++解决了,还有C报错,Qt Cmake configuration has no path to a C compiler set, even though the toolkit has a valid tool chain
解决方案:重启电脑一般就可解决,即使不重启c报错,也可以运行程序;
QT5+VS2019 构建套件(Kit)黄色感叹号问题解决
参考1
参考2
警告二、
MSVC编译器版本不同,只需要改成相同版本即可
例如vs是2019,qt是2017,默认情况下会报警告版本不同,此时需要同时将编译器设置为2017
七、Qt5初次导入msvc2017_64编译器遇到的问题记录
Qt 5设置 MSVC编译器
参考1
不知道 Windows Software Development Kit 在哪的看下面
参考2
八、Qt通过Debug编译后再发布,程序报错
Qt通过Debug编译后调试正常但是发布后,程序运行不起来,并报如下错误
此时我们可以尝试用release模式编译后再发布,不出其它意外,应该可以正常运行了(大部分情况是用了MSVC编译环境导致的,也就是结合vs的MSVC编译时用release发布,其它Mingw一般debug后发布就可以,具体原因未深入了解,有大佬看到望补充)
Qt:项目发布Debug和Release版的区别:
- Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试。Debug模式下生成两个文件,除了.exe或.dll文件外,还有一个.pdb文件,该文件记录了代码中断点等调试信息
- Release:发布版本,不对源代码进行调试,编译时对应用程序的速度进行优化,使得程序在代码大小和运行速度上都是最优的。(调试信息可在单独的PDB文件中生成)。Release模式下生成一个文件.exe或.dll文件
- 正常流程理论上是Debug->Release->发布
九、Qt实现文件上传下载
- Qt4的QFtp类(Qt5居然抛弃了这个类);
- Qt5的QNetworkAccessManager(抛弃了QFtp,这个类只能实现上传下载);
- POCO中的 FTPClientSession
其他辅助参考
Qt中ftp文件传输-Linux-Ftp服务
QT5中使用QFtp类(添加ftp模块)
Qt FTP文件上传下载Demo
QT5中如何使用QFtp类
十、QT之UI设计与运行后窗口显示不一致
导致该现象的原因有:显示屏分辨率过高
我的是4K屏,通过拖拽做出的页面与运行后窗口显示不一致
解决办法1:网上大多是给出在main函数的第一行中加入以下代码的方法
//在main.cpp文件中加入如下代码
if(QT_VERSION>=QT_VERSION_CHECK(5,6,0))
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
解决办法2:不用拖拽,通过布局类手敲界面,就不会出现这类问题
十一、QT的zero as null pointer constant警告
十二、QT之常用方法记录(C++)
0、设置程序logo
MainWindow::close();
setWindowFlags (Qt::CustomizeWindowHint)
setWindowFlags (Qt::FramelessWindowHint)
两个函数都可以去掉标题栏,区别是第一个可以鼠标缩放窗口
3、窗口显示
showFullScreen() // Qt全屏显示函数
showMaximized() // Qt最大化显示函数
showMinimized() // Qt最小化显示函数
resize(x, y) // Qt固定尺寸显示函数
setMaximumSize(w, h) // Qt设置最大尺寸函数
setMinimumSize(w, h) // Qt设置最小尺寸函数
官网下载qtxlsx:http://qtxlsx.debao.me/
三种方法为QLineEdit添加清除内容按钮:https://www.shuzhiduo.com/A/kPzOQ66o5x/
Qt学习总结之Qlineedit:https://blog.csdn.net/qq_27726087/article/details/126305605
6、Qt实现启动画面
十三、QT之开发技术集合(含其他)
红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等
十四、常用类型转换
Qt中, 很多函数都需要使用QString类型, double类转换QString类型, 使用QString::number()函数;
第一个参数为: 需要转换的double数据;第二个参数为: 基数, 10, 2, 8等; 第三个参数为精度;
double intResult;
QLabel* pornPropLabel;
pornPropLabel->setText(QString::number(intResult, 10, 4));//double数据\基数\精度
int转QString
int timers=timer.elapsed();
QString size2 = QString::number(timers);
//qint64等同理
十五、Qt初始化加载等待页面
#include <QSplashScreen>
#include <QPixmap>
#include <QDebug>
#include <QElapsedTimer>
#include <QDateTime>
int main(int argc, char *argv[])
{
if(QT_VERSION>=QT_VERSION_CHECK(5,6,0))
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication a(argc, argv);
a.processEvents();//使程序在显示启动画面的同时仍能响应鼠标等其他事件
QPixmap pixmap(":/images/Start/Start.svg");
QSplashScreen splash(pixmap);
splash.show();
//初始化界面延时方法一
// #if 0
QElapsedTimer timer;
timer.start();
while(timer.elapsed() < 5000)
{
qint64 timers=timer.elapsed();
QString size2 = QString::number(timers);
splash.showMessage(size2, Qt::AlignLeft, Qt::white);
QCoreApplication::processEvents();//非阻塞延时
}
// #endif
//初始化界面延时方法二
#if 0
QDateTime n=QDateTime::currentDateTime();
QDateTime now;
do{
now=QDateTime::currentDateTime();
QCoreApplication::processEvents();
} while (n.secsTo(now)<=5);//5为需要延时的秒数
#endif
login w;
w.show();
splash.finish(&w);
return a.exec();
}
十六、Qt连接数据库
0、Qt数据库
连接数据库
Qt内置好几种数据库驱动,而且内置了QSqLite开源数据库,如果要使用QSqLite,直接连接,而无需安装创建
如果使用其它数据库,则需要安装对应数据库即可
1、Qt连接QSQLite
十七、大佬博客
十八、技术/插件网站
十九、通信/协议/解析
二十、Ubuntu_22.4安装Qt
二十一、解决QT 编译QWebEngineWidgets错误
解决QT 编译QWebEngineWidgets出现错误Project ERROR: Unknown module(s) in QT: webenginewidgets问题
https://blog.csdn.net/sinat_41928334/article/details/118277772