栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

《QDebug 2022年5月》

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《QDebug 2022年5月》

一、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 
#include 

class CppObject : public QObject
{
    Q_OBJECT
public:
    explicit CppObject(QObject *parent = nullptr);

    Q_INVOKABLE void funcA(const QString &a, const QString &b){
        qDebug()<<__FUNCTION__<
    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 .pro

进行翻译: 


    
    
        
        Hello
    

写好翻译后,和普通的翻译文件发布有一点不同,需要给 lrelease 加 -idbased 参数:

lrelease -idbased .pro

这样我们正常加载生成的 qm 翻译文件就行了。 

参考文档:https://doc.qt.io/qt-5/qtglobal.html#qtTrId

参考文档:https://doc.qt.io/qt-5/linguist-id-based-i18n.html

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/938475.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号