qt中的no-stringliteral

这些天在做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去掉了废弃了选项。

猜你喜欢

转载自blog.csdn.net/tusong86/article/details/105814065