一、Qt Widgets 问题交流
1.升级Qt6后,QTableView::indicator样式表没生效
之前的样式:
ui->tableWidget->setStyleSheet(
"QTableView::indicator{width:24px; height:24px;} "
"QTableView::indicator:checked{image:url(:/SwitchOn.png);} "
"QTableView::indicator:unchecked{image:url(:/SwitchOff.png);} ");
在Qt6中这个图标不会显示出来:
?
在Qt6中修改之后才正常显示:
(给item设置border或者background,indicator的样式就生效了)
ui->tableWidget->setStyleSheet(
"QTableView::item{border:0;} "
"QTableView::indicator{width:24px; height:24px;} "
"QTableView::indicator:checked{image:url(:/SwitchOn.png);} "
"QTableView::indicator:unchecked{image:url(:/SwitchOff.png);} ");
??
这让我想起之前的border也有类的问题,如果单独设置一个边可能不会生效,对border整体设置后再设置某个边就生效了。?
二、Qt Quick 问题交流
1.注意QML调用C++注册类的接口时,参数的类型转换
像bool和int转换这种就不说了,C++里本身就有。但是QML比较坑爹是会把一些C++里本来不自动转换的类型也给转了,特别是和QString的转换。
测试代码:
#pragma once
#include <QObject>
#include <QDebug>
class CppObject : public QObject
{
Q_OBJECT
public:
explicit CppObject(QObject *parent = nullptr);
Q_INVOKABLE void funcA(const QString &a, const QString &b){
qDebug()<<__FUNCTION__<<a<<b;
}
Q_INVOKABLE void funcB(const int &a, const bool &b){
qDebug()<<__FUNCTION__<<a<<b;
}
};
Row {
anchors.centerIn: parent
spacing: 10
Button {
text: "A"
onClicked: {
let arg1=10;
let arg2=true;
cpp_obj.funcA(arg1,arg2);
}
}
Button {
text: "B"
onClicked: {
let arg1="10";
let arg2="true";
cpp_obj.funcB(arg1,arg2);
}
}
}
输出如下:
?
所以在QML中调用C++的接口时,一定要注意参数类型是否正确,避免错误的自动转换。
三、其他
1.使用qtTrId翻译多个页面共用的词
我们使用 QObject::tr()(QML使用qsTr())标注翻译的文本时,需要根据定义的类型逐个填写翻译词汇。
对于一些高频的词,可能想要只翻译一次,然后多个类型文件共享这个翻译。通过测试,我发现一个不太合理的解决方法。Qt 除了提供 QObject::tr() 用于翻译,还有一个?qtTrId() (QML使用qsTrId())函数指定字符串 id,然后替换这个 id 的内容,而且这个 id 是可以多个类型文件共享的,只需要单独做个高频词汇的翻译文件在普通翻译文件加载后进行加载即可。
操作流程:
QML代码加上qsTrId:
Text {
id: backTxt;
text: qsTrId("你好");
}
生成 ts 步骤和普通的 tr 翻译一样:
lupdate <myapp>.pro
进行翻译:?
<context>
<name></name>
<message id="你好">
<source></source>
<translation>Hello</translation>
</message>
</context>
写好翻译后,和普通的翻译文件发布有一点不同,需要给 lrelease 加 -idbased 参数:
lrelease -idbased <myapp>.pro
这样我们正常加载生成的 qm 翻译文件就行了。?
参考文档:https://doc.qt.io/qt-5/qtglobal.html#qtTrId
参考文档:https://doc.qt.io/qt-5/linguist-id-based-i18n.html
|