qt中的no-stringliteral

在从Windows到UOS系统的Qt界面迁移过程中,遇到UI文件编译错误。问题源于Qt版本5.11.3中uic工具使用QLatin1String而非QStringLiteral,导致编译失败。通过修改代码为QStringLiteral解决问题,推测此为Qt中间版本引入后被废弃的选项。

这些天在做qt界面的国产化迁移,从windows迁移到uos系统,windows下qt的版本是5.9.6,uos环境qt的版本是5.11.3,迁移后,有一处ui文件生成的.h编译不过,比如ui的名称是UnLockDlg.ui,经过uic编译后的名称为ui_UnLockDlg.h,然后make编译时报错,打开文件,报错的行为红色方框的这行,下面是具体的报错信息。
no known conversion for argument 1 from ‘QLatin1String’ to ‘const QKeySequence&’
在这里插入图片描述
然而,我在windows打开ui_UnLockDlg.h,对应的信息如下:
在这里插入图片描述
可以看出,红色方框不一样,为此,将uos环境下的ui_UnLockDlg.h不同的地方修改成QStringLiteral,结果编译通过。

接下来就是为什么5.11.3中会是这种现象,由于uos是linux内核,故make的时候,编译过程看看的清清楚楚,编译过程中的这段话吸引了我:
/usr/lib/qt5/bin/uic -no-stringliteral …/…/…/src/Portal/ui/MainWidget/Lock/UnLockDlg.ui -o GeneratedFiles/ui_UnLockDlg.h
上面的语句是用uic将ui编译成.h的过程,其中参数-no-stringliteral值的注意,语义很明显,接着查看了uic的选项中-no-stringliteral的解释,如下图:
在这里插入图片描述
Use QLatin1String instead of QStringLiteral in generated code.
很明显就是用QLatin1String替代QStringLiteral,从而造成了编译不过

我预计qt公司自己后来也发现了此问题,所以在后面的5.12.0版本中去掉了此选项,如下图
在这里插入图片描述Deprecated. The use of this option won’t take any effect
可以看出,此选项已经被废弃。

我们再来查看qt的官方下载地址 http://download.qt.io/archive/qt/,如下图:
在这里插入图片描述
可以看出,5.9和5.12中间少了5.10和5.11,5.9中没有-no-stringliteral选项,5.12中废弃了此选项,所以
5.11存在此问题,qt公司后来应该是发现了,所以在下载版本中未提供了相应版本的下载。

结论:uic中-no-stringliteral是中间版本(可能从5.10)引入的,后面发现了此问题,所以在5.12去掉了废弃了选项。

#include "form.h" #include "ui_form.h" #include <memory> #include "/home/hqyj/Desktop/Qtxue/x/xsgl/xsgl/mainwindow.h" #include <QtCore/qbytearray.h> #include <QtCore/qmetatype.h> #include <QObject> #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'widget.h' doesn't include <QObject>." #elif Q_MOC_OUTPUT_REVISION != 67 #error "This file was generated using the moc from 5.14.2. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif QT_BEGIN_MOC_NAMESPACE QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form) { ui->setupUi(this); } Form::~Form() { delete ui; } struct qt_meta_stringdata_Widget_t { QByteArrayData data[19]; char stringdata0[445]; }; #define QT_MOC_LITERAL(idx, ofs, len) \ Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ qptrdiff(offsetof(qt_meta_stringdata_Widget_t, stringdata0) + ofs \ - idx * sizeof(QByteArrayData)) \ ) static const qt_meta_stringdata_Widget_t qt_meta_stringdata_Widget = { { QT_MOC_LITERAL(0, 0, 6), // "Widget" QT_MOC_LITERAL(1, 7, 22), // "onConnectButtonClicked" QT_MOC_LITERAL(2, 30, 0), // "" QT_MOC_LITERAL(3, 31, 11), // "onConnected" QT_MOC_LITERAL(4, 43, 12), // "offConnected" QT_MOC_LITERAL(5, 56, 11), // "onReadyRead" QT_MOC_LITERAL(6, 68, 22), // "onDisplayButtonClicked" QT_MOC_LITERAL(7, 91, 25), // "onDisconnectButtonClicked" QT_MOC_LITERAL(8, 117, 29), // "on_data1PushbuttonJia_clicked" QT_MOC_LITERAL(9, 147, 30), // "on_data1PushbuttonJian_clicked" QT_MOC_LITERAL(10, 178, 29), // "on_data2PushbuttonJia_clicked" QT_MOC_LITERAL(11, 208, 30), // "on_data2PushbuttonJian_clicked" QT_MOC_LITERAL(12, 239, 29), // "on_data3PushbuttonJia_clicked" QT_MOC_LITERAL(13, 269, 31), // "on_data3PushbuttonJiian_clicked" QT_MOC_LITERAL(14, 301, 29), // "on_data4PushbuttonJia_clicked" QT_MOC_LITERAL(15, 331, 30), // "on_data4PushbuttonJian_clicked
03-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值