Qt开发遇到的坑---kalrry
- 一、依赖引入坑
- 二、Qt在Debug时报错
- 1、编译器是 **MSVC** 还是 **MinGW**
- 2、编译器 32位 还是 64位
- 三、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连接数据库
-
- 十七、大佬博客
- 十八、技术/插件网站
- 十九、通信/协议/解析
- 二十、
一、依赖引入坑
.pro文件中增加引入
INCLUDEPATH += $$quote(D:\ProgramFiles\UG\NX 10.0\UGOPEN)
INCLUDEPATH += $$quote(D:\ProgramFiles\UG\NX 10.0\UGOPENPP)
LIBS += $$quote(D:\ProgramFiles\UG\NX 10.0\UGOPEN\libufun.lib)
LIBS += $$quote(D:\ProgramFiles\UG\NX 10.0\UGOPEN\libufun_cae.lib)
LIBS += ......
二、Qt在Debug时报错
1、编译器是 MSVC 还是 MinGW
遇到上述问题,其实是编译器问题,因为 MSVC 与 MinGW 编译出来的库文件存在兼容性问题,当你的项目使用 MinGW 编译的使用,想要用一个 MSVC 编译生成的库时就会出现如上报错。
该错误说后面这一串东西没定义,但我们按住 Ctrl 点进去发现可以正常链接到,所以并不是我们引用问题。
原因是 UG 的库文件都来自 MSVC 编译的,所以 Qt 在 Debug 时候的编译器要配置成 MSVC 才可以正常识别。
Qt配置MSVC传送门
2、编译器 32位 还是 64位
传送门
MSVC 32位 报错就换 MSVC 64位,反之
Qt配置MSVC传送门
三、Qt+MSVC编译后中文乱码
在Qt头文件中添加如下代码即可解决
该代码仅支持VS环境
但我们发现在QT中也管用,原因可能就是我们最终是Qt+msvc编译的,可能间接性属于vs环境
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
四、不能将const char类型的值分配到const 类型的实体
用MSVC编译时候遇到如上问题
char* Height = "100";
char* Diam = (char*)"100";
五、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函数的第一行中加入以下代码的方法
if(QT_VERSION>=QT_VERSION_CHECK(5,6,0))
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
解决办法2:不用拖拽,通过布局类手敲界面,就不会出现这类问题
十一、QT的zero as null pointer constant警告
参考
十二、QT之常用方法记录(C++)
参考
Qt QML与C++混合编程
0、设置程序logo
1、创建按钮关闭窗口:按键里的方法写
MainWindow::close();
2、隐藏软件顶部标题栏
setWindowFlags (Qt::CustomizeWindowHint)
setWindowFlags (Qt::FramelessWindowHint)
两个函数都可以去掉标题栏,区别是第一个可以鼠标缩放窗口
3、窗口显示
showFullScreen()
showMaximized()
showMinimized()
resize(x, y)
setMaximumSize(w, h)
setMinimumSize(w, h)
4、Qt操作excel
官网下载qtxlsx:http://qtxlsx.debao.me/
5、QLineEdit常见用法
三种方法为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、单片机、软硬结合等等
上面大佬博客
十四、常用类型转换
double转QString
Qt中, 很多函数都需要使用QString类型, double类转换QString类型, 使用QString::number()函数;
第一个参数为: 需要转换的double数据;第二个参数为: 基数, 10, 2, 8等; 第三个参数为精度;
double intResult;
QLabel* pornPropLabel;
pornPropLabel->setText(QString::number(intResult, 10, 4));
int转QString
int timers=timer.elapsed();
QString size2 = QString::number(timers);
十五、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();
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();
}
#if 0
QDateTime n=QDateTime::currentDateTime();
QDateTime now;
do{
now=QDateTime::currentDateTime();
QCoreApplication::processEvents();
} while (n.secsTo(now)<=5);
#endif
login w;
w.show();
splash.finish(&w);
return a.exec();
}
十六、Qt连接数据库
0、Qt数据库
连接数据库
Qt内置好几种数据库驱动,而且内置了QSqLite开源数据库,如果要使用QSqLite,直接连接,而无需安装创建
如果使用其它数据库,则需要安装对应数据库即可
1、Qt连接QSQLite
- Qt 使用 sqlite数据库
- Qt中QSqlite的使用
- Qt QSqlite数据库
- Qt中使用SQLite
- Qt连接sqlite数据库
- Qt中操作SQLite数据库
十七、大佬博客
- 梁如风
- 长沙红胖子Qt
- Qt进阶之路-大佬仓库
- 武威的涛娃-大佬
- 嵌入式小龙
- Jamie.T
- kissgoodbye2012
十八、技术/插件网站
- QtCN论坛
- Qt操作excel-qtxlsx官方下载
- QCustomPlot
十九、通信/协议/解析
- Qt项目中TCP通信的实现方式经验总结
二十、
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)