IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 《QDebug 2022年5月》 -> 正文阅读

[C++知识库]《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 <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

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-06-06 17:10:30  更:2022-06-06 17:11:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:20:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码