Qt开发遇到的坑---kalrry

一、依赖引入坑

.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

在这里插入图片描述

遇到上述问题,其实是编译器问题,因为 MSVCMinGW 编译出来的库文件存在兼容性问题,当你的项目使用 MinGW 编译的使用,想要用一个 MSVC 编译生成的库时就会出现如上报错。
该错误说后面这一串东西没定义,但我们按住 Ctrl 点进去发现可以正常链接到,所以并不是我们引用问题。
原因是 UG 的库文件都来自 MSVC 编译的,所以 QtDebug 时候的编译器要配置成 MSVC 才可以正常识别。

Qt配置MSVC传送门

2、编译器 32位 还是 64位

在这里插入图片描述
传送门
MSVC 32位 报错就换 MSVC 64位,反之

Qt配置MSVC传送门1
Qt配置MSVC传送门2

三、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版的区别:

  1. Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试。Debug模式下生成两个文件,除了.exe或.dll文件外,还有一个.pdb文件,该文件记录了代码中断点等调试信息
  2. Release:发布版本,不对源代码进行调试,编译时对应用程序的速度进行优化,使得程序在代码大小和运行速度上都是最优的。(调试信息可在单独的PDB文件中生成)。Release模式下生成一个文件.exe或.dll文件
  3. 正常流程理论上是Debug->Release->发布

九、Qt实现文件上传下载

有三种方式

  1. Qt4的QFtp类(Qt5居然抛弃了这个类);
  2. Qt5的QNetworkAccessManager(抛弃了QFtp,这个类只能实现上传下载);
  3. 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++)

参考
Qt QML与C++混合编程

0、设置程序logo

1、创建按钮关闭窗口:按键里的方法写

MainWindow::close();

2、隐藏软件顶部标题栏

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设置最小尺寸函数

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));//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

  1. Qt 使用 sqlite数据库
  2. Qt中QSqlite的使用
  3. Qt QSqlite数据库
  4. Qt中使用SQLite
  5. Qt连接sqlite数据库—较为详细
  6. Qt中操作SQLite数据库

十七、大佬博客

  1. 梁如风
  2. 长沙红胖子Qt
  3. Qt进阶之路-大佬仓库
  4. 武威的涛娃-大佬
  5. 嵌入式小龙
  6. Jamie.T
  7. kissgoodbye2012

十八、技术/插件网站

  1. QtCN论坛
  2. Qt操作excel-qtxlsx官方下载
  3. QCustomPlot

十九、通信/协议/解析

  1. Qt项目中TCP通信的实现方式经验总结

二十、Ubuntu_22.4安装Qt

  1. Ubuntu22.04安装qt—比较详细
  2. Linux-22.04Ubuntu下安装QT

二十一、解决QT 编译QWebEngineWidgets错误

解决QT 编译QWebEngineWidgets出现错误Project ERROR: Unknown module(s) in QT: webenginewidgets问题
https://blog.csdn.net/sinat_41928334/article/details/118277772

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kalrry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值