QtQML开发中一些小问题记录

1、QT开发过程中,遇到一个很奇葩的问题,报异常直接报道搜狗拼音输入法中
D:\Program Files (x86)\SogouInput\Components\Error - RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly
这个首先想到的是输入法出了问题,卸载后任然一样报错,最后经过调试程序,原来是使用了没有初始化的指针导致的

2、QML FileDialog模块使用出现卡顿现象
import QtQuick.Dialogs 1.2改为 import Qt.labs.platform 1.0

3、QML项目windeployqt 发布
注意:如果发布的应用是Qt Quick Application应用,那么命令行需要加上QML的安装目录。命令中的D:\Qt\Qt5.5.1\qml是qml的安装目录,请换成你自己的qml安装目录!!!
windeployqt hello.exe–qmldir D:\Qt\Qt5.5.1\qml

4、QML File Dialog QSettings organizationName/Domain
file:///C:/Qt/5.13.0/msvc2017_64/qml/QtQuick/Dialogs/DefaultFileDialog.qml:101:33: QML Settings: Failed to initialize QSettings instance. Status code is: 1
file:///C:/Qt/5.13.0/msvc2017_64/qml/QtQuick/Dialogs/DefaultFileDialog.qml:101:33: QML Settings: The following application identifiers have not been set: QVector(“organizationName”, “organizationDomain”)
Solution:
QCoreApplication::setOrganizationName(“something”);

5、出现报错 libuntitled7.so: QPainter::begin: Paint device returned engine == 0, type: 3
W libuntitled7.so: Can’t generate image

检查 sourceSize.width等数据是否正确

6、qt工程在编译时提示undefined reference tp 'XXX::staticMetaObject’
当在编程QT应用程序在类的定义中包含Q_OBJECT宏,编译时qmake生成的makefile将会自动包含一些运行moc的规则,moc就是指QT的元对象编译器,即meta_object complier。

为了使moc能够正常运行,必须把类定义从实现文件中分离出来并放到头文件中。由moc生成的代码会包含这个头文件,并且会添加一些特殊的C++代码。

必须对使用了Q_OBJECT宏的类运行moc。因为qmake会自动在makefile中添加这些必要的规则,所以开发人员不必在编译时使用moc。但是如果忘记了使用qmake重新生成makefile,并且也没有重新运行moc,那么连接程序就会报错,指出你声明了一些函数但是却没有实现它们。在linux平台下,这些信息可能是’undefined reference to ‘XXX::staticMetaObject’(XXX是类名)。

所以遇到这种情况时,可重新运行qmake生成新的makefile文件,然后在重新构建该应用程序。

(注:当程序中需要使用Q_OBJECT宏时,应将它放入头文件中。)

7、报错

qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed

搜索libeay32.dll和ssleay32.dll将Tools目录下的拷贝到Qt\5.12.1\mingw73_64\bin下(如果此目录没有)
在这里插入图片描述
Qt自带的老版本OpenSSL1.0.x在今年(2019)就要结束LTS支持了,那么从本版本开始(5.12.4)Qt将启用1.1.x,新版本带来的TLS1.3很牛逼,,把dll的名字改了,以前经典的libeay32.dll和ssleay32.dll变成了libcrypto-1_1.dll 和libssl-1_1.dll.
解决问题

找到Qt里的OpenSSL版本号

 qDebug()<<QSslSocket::sslLibraryBuildVersionString();

输出

OpenSSL 1.1.1b  26 Feb 2019
  • 下载安装OpenSSL1.1.1的二进制文件
    自己编译太麻烦,还是直接下载现成的。下载地址http://slproweb.com/products/Win32OpenSSL.html,注意根据自己需要的是32位还是64位选择对应的包。我下载的是Win64
    OpenSSL v1.1.1c Light
  • 安装好之后将libcrypto-1_1-x64.dll
    和libssl-1_1-x64.dll两个文件拷贝到F:\Qt\5.12.1\mingw73_64\bin文件夹下即可

8:警告
译时出现警告 Warning: Class Node implements the interface QGraphicsItem but does not list it in Q_INTERFACES. qobject_cast to QGraphicsItem will not work!
在类的声明(Q_OBJECT下面)中添加:Q_INTERFACES(QGraphicsItem)可解决该问题.

9:1060编译堆栈控件不足
原因是:当运行别人代码时当Qt添加大量资源文件,编译时会出现内存溢出。
在.pro 文件里面加上 CONFIG += resources_big

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值