《QDebug 2023年6月》

news2024/12/23 11:03:14

一、Qt Widgets 问题交流

二、Qt Quick 问题交流

1.Qt5 的 QML Settings 没有设置编码的接口

Qt6 虽然移除了 QSettings 的 setIniCodec 接口,默认为 utf8,但是 Qt5 这个接口还能用,且没有默认 utf8。这就导致用 Qt5 QML 的 Settings 没法像 C++ 的 QSettings 一样设置成 utf8 编码。

import QtQuick 2.15
import QtQuick.Window 2.15
import Qt.labs.settings 1.0

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello Settings")

    Settings {
        category: "Group"
        fileName: "config.ini"

        property string mykey: "中文值"

        Component.onCompleted: {
            setValue("MyKey2", "第二个")
        }
    }
}

  

而且这个接口设计还有个问题,属性名只能小写开头,没法绑定大写的 key 名,只能用 set 接口来设置。

2.Qt5.15.2 安卓 QML 组件的 plugins.qmltypes 文件接口描述不完整

Qt Bug:https://bugreports.qt.io/browse/QTBUG-85888

以 Window 类型为例,安卓目录下(\5.15.2\android\qml\QtQuick\Window.2)的  plugins.qmltypes 文件才 2KB,而 MSVC 目录下的有 15KB,打开对比文本发现接口少了很多。这就导致写安卓项目时,Qt Creator 没法正常的提示接口,还会报红色警告:

3.ListView 和 Repeater 组件在增删 model 元素时的一点区别 

如果在一个函数中 remove model 的一个元素,Repeater 会立即删除 Item,ListView 会在函数执行完删除 Item。使用 Repeater 的时候,如果在 delegate Item 内部执行带 remove 操作的函数,那函数内接下来就没法访问其他的对象了。

测试环境 Qt5.15.2,测试代码:

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello Qml")

    Column {
        anchors.centerIn: parent
        spacing: 12

        ListView {
            id: a_listview
            width: 400
            height: 24
            model: a_model
            orientation: ListView.Horizontal
            spacing: 1
            delegate: Button {
                text: model.title
                width: 100
                height: 24
                onClicked: {
                    var i = model.index;
                    var data = a_model.get(i);
                    a_model.remove(i);
                    a_model.counter++;
                    a_model.insert(i, {"title" : a_model.counter});
                    console.log('a clicked finished')
                }
                Component.onDestruction: {
                    console.log('a free')
                }
            }
        }

        Row {
            spacing: 1
            height: 24
            Repeater {
                id: b_repeater
                model: b_model
                delegate: Button {
                    text: model.title
                    width: 100
                    height: 24
                    onClicked: {
                        var i = model.index;
                        var data = b_model.get(i);
                        b_model.remove(i);
                        //b_model.counter++;
                        //b_model.insert(i, {"title" : b_model.counter});
                        console.log('b clicked finished')
                    }
                    Component.onDestruction: {
                        console.log('b free')
                    }
                }
            }
        }

    }

    ListModel {
        id: a_model
        property int counter: 0
        Component.onCompleted: {
            for (var i = 0; i < 3; i++)
            {
                a_model.counter++;
                a_model.append({"title" : a_model.counter});
            }
        }
    }

    ListModel {
        id: b_model
        property int counter: 0
        Component.onCompleted: {
            for (var i = 0; i < 3; i++)
            {
                b_model.counter++;
                b_model.append({"title" : b_model.counter});
            }
        }
    }
}

三、其他

1.信号槽跨线程传递数据,接收线程不能及时处理的问题

假设:A 线程持续从 IO 接收数据,然后传递给 B 线程进行处理,比较完善的写法是会用一个线程安全的队列。但有时为了省事选择直接用信号槽来传递数据,这可能在开发机上没什么问题,正常运行,但到了配置比较低的机器,可能会内存溢出崩掉,或者运行一段时间后崩掉。因为配置低的机器可能处理速度比我们接收的速度慢,这就导致信号槽的异步调用事件一直堆积,如果信号传的数据比较大就会很快内存溢出,如果数据很小也可能会超过事件队列的上限值。

这时候还是得用上跨线程的队列来传递,对来不及处理的进行丢弃或者警告;也可以用自定义事件,然后对来不及处理的事件进行合并。

2.Asio 在安卓上用 socket.native_handle() 设置 UDP 阻塞超时没效果

asio::ip::udp::socket 可以用 native_handle 拿到原始套接字,在 windows 上可以用来设置 UDP 的读写超时时间,因为 Asio 是异步操作的库,所以本身没有提供阻塞超时相关的接口,用 native_handle 来实现的话比用定时器方便很多。但是,当我把代码放到安卓环境里跑的时候,这样设置超时不生效了,但是 C 语言 API 创建的 socket 设置超时时间是有用的。

    // 设置超时时间
#if defined(WIN32)
    int time_out = 2000;
    int ret = setsockopt(socket.native_handle(), SOL_SOCKET, SO_RCVTIMEO, (const char*)&time_out, sizeof(time_out));
#else
    timeval timeout = { 2, 0 };
    int ret = setsockopt(socket.native_handle(), SOL_SOCKET, SO_RCVTIMEO, (const void*)&time_out, sizeof(time_out));
#endif
    if (ret != 0) {
        return false;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/715789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MAYA传送带上放石头(新旧粒子系统)

播放试试 使用老的粒子系统 particleShape1.shuliangrand(0,5); particleShape1.daxiao<<rand(0.2,0.5),rand(0.2,0.5),rand(0.2,0.5)>>; particleShape1.xuanzhuan<<rand(360),rand(360),rand(360)>>; 使用新的粒子系统 粒子向后滑落 新粒子系统能进行…

桥梁结构健康监测方案

一、方案背景 随着国民经济的快速发展&#xff0c;我国的基础设施建设得到蓬勃发展。桥梁作为国民生命财产安全的生命线&#xff0c;关系到国民经济和人民生活的可持续发展。在桥梁的长期运营过程中&#xff0c;存在施工缺陷、材料老化、自然环境以及荷载作用等原因造成桥梁结…

【Vue3】学习笔记-shallowReactive与ShallowRef

shallowReactive&#xff1a;只处理对象最外层属性的响应式&#xff08;浅响应式&#xff09;。 shallowRef&#xff1a;只处理基本数据类型的响应式, 不进行对象的响应式处理。 什么时候使用? 如果有一个对象数据&#xff0c;结构比较深, 但变化时只是外层属性变化 > sh…

【笔记】华南理工大学-智能计算方法 考试重点笔记 [非常详细]

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 目录 大纲 主观题 简答题 大纲 主观题 大题&#xff0c;40分&#xff0c;智能计算与自己专业方向结合&#xff0c;思路、图、公式等均可。 简答题

C/C++服务器和客户端交互笔记

C/C服务器开发 网络与通信Socket Socket通信三要素&#xff1a;通信的目的地址、使用的端口号&#xff08;http 80 / smtp 25&#xff09;、使用的传输协议&#xff08;TCP、UDP&#xff09;。 nslookup xx 可以查询xx网址的IP地址。 Socket通信模型 telnet ipxx 进行主机…

在ik分词器中自定义配置分词

找到ik分词器安装目录下的IKAnalyzer.cfg.xml配置文件 打开后就有让我们配置扩展字典的位置,还有停止的,这里的文件名完全自定义 当写完后然后再安装目录下创建这两个文件夹 在创建完成后重启elasticsearch即可 如果配置未生效很有可能是文件的编码格式有问题,我们将编码改为UT…

Linux-扩展篇-RPM和Yum-克隆和快照

扩展篇 学自尚硅谷武晟然老师&#xff0c;结合老师课堂内容和自己笔记所写博文。 文章目录 扩展篇软件包管理一、RPM1、RPM概述2、命令查询命令卸载命令安装命令 二、yum1、yum概述2、命令3、修改网络yum源 克隆虚拟机克隆快照 Shell编程Shell 概述 软件包管理 一、RPM 1、RP…

WIN11系统安装MySql8.0.15详细安装

一.下载mysql8.015数据库 下载地址&#xff1a; 如下图所示 此处下载的是8.0.15版本&#xff0c;免安装版&#xff0c;系统为64位系统&#xff1a; 二&#xff0c;配置mysql环境变量: D:\program_file_worker\mysql8.15\mysql-8.0.15-winx64\bin 三. 环境配置完成后&#xff…

优化设备管理,半导体CMS系统的重要性和优势解析

在半导体制造行业中&#xff0c;设备管理对于企业的生产效率和成本控制起着至关重要的作用。随着技术的不断进步和市场的竞争加剧&#xff0c;企业需要更加精细化、智能化地管理设备&#xff0c;以提高生产效率、降低维修成本&#xff0c;并确保产品质量的稳定性。 图.半导体芯…

vue 对话框内容超出组件问题

遇到这种问题该怎么解决, 样式问题 很好解决 解决方案很简单: 用flex布局的flex-wrap: wrap 数据 自适应布局 水了一篇 哈哈哈

管理类联考——数学——趣味篇——公式——图形推导

&#x1f3e0;个人主页&#xff1a;fo安方的博客✨ &#x1f482;个人简历&#xff1a;大家好&#xff0c;我是fo安方&#xff0c;考取过HCIE Cloud Computing、CCIE Security、CISP、RHCE、CCNP RS、PEST 3等证书。&#x1f433; &#x1f495;兴趣爱好&#xff1a;b站天天刷&…

SNMP 计算机网络管理 实验1(三) 练习与使用Wireshark抓取SNMP数据包抓包之任务四 分析并验证ARP协议数据单元的格式;

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

【python】__init__.py 文件的作用

先看文件夹组成&#xff1a; 可以看到&#xff0c;几乎每个文件夹下都有__init__.py&#xff0c;一个目录如果包含了__init__.py 文件&#xff0c;那么它就变成了一个包&#xff08;package&#xff09;。__init__.py可以为空&#xff0c;也可以定义包的属性和方法&#xff0…

Java开发 - Canal进阶之和Redis的数据同步

前言 Canal在数据同步中是非常常见的&#xff0c;一般我们会用它来做MySQL和Redis之间、MySQL和ES之间的数据同步&#xff0c;否则就是手动通过代码进行同步&#xff0c;造成代码耦合度高的问题&#xff0c;这并不是我们愿意看见的&#xff0c;今天这篇博客博主将给大家演示Ca…

速下载|2023上半年网络与数据安全法规政策、国标、报告合集

随着国家数字经济建设进程加快&#xff0c;数据安全立法实现由点到面、由面到体加速构建&#xff0c;目前我国数据安全立法已基本形成以《网络安全法》《数据安全法》《个人信息保护法》《密码法》等法律为核心&#xff0c;行政法规、部门规章为依托&#xff0c;地方性法规、地…

【全文搜索选型】全文搜索 PostgreSQL 或 ElasticSearch

在本文中&#xff0c;我记录了在 PostgreSQL&#xff08;使用 Django ORM&#xff09;和 ElasticSearch 中实现全文搜索 (FTS) 时的一些发现。 作为一名 Django 开发人员&#xff0c;我开始寻找可用的选项来在大约一百万行的标准大小上执行全文搜索。有两个值得尝试的选项&…

百度文心一言App已在AppStore上架—特别是发现页的功能太强大了

百度文心一言 App 现已上架苹果 App Store&#xff0c;所有用户可免费下载安装。 特别是发现页的功能&#xff0c;真的太强大了&#xff0c;基本涵盖了你所有已知的 AI 工具功能&#xff01;比如&#xff1a; 小红书探店文案、风格头像、朋友圈神器、短视频脚本生成、AI 绘画…

【ESP32 开发】| Clion 搭建 ESP32 开发环境

目录 前言1 软件以及所需工具2 安装 ESP-IDF 4.4.42.1 开始安装2.2 选择组件&#xff0c;建议全选 3 用 ESP-IDF 4.4 CMD 添加环境变量并新建工程3.1 打开 ESP-IDF 4.4 CMD 初始化环境变量3.2 切到工作路径并新建工程 4 配置 Clion 开发环境4.1 用 Clion 打开新建的工程文件4.2…

有了企业网盘,为什么要需要知识文档管理系统

关键词&#xff1a;企业网盘、知识文档管理系统、群晖NAS 编者按&#xff1a;随着企业办公室自动化的要求越来越明显&#xff0c;企业对于文档存储的需求也逐渐加大。企业网盘的出现解决了公司文件数据储存等难题。但随着企业的文档数据逐渐增多&#xff0c;如何安全管理企业重…

蓝牙资讯|苹果AirPods Pro充电盒将换用USB-C接口,还有新功能在测试

据彭博社记者 Mark Gurman 在他的最新一期 Power On 时事通讯中报道&#xff0c;苹果正准备推出适用于 AirPods Pro 的 USB-C 充电盒&#xff0c;大概会在今年秋天与 iPhone 15 系列一起推出&#xff0c;后者也将从 Lightning 端口切换到 USB-C 端口。 此外&#xff0c;苹果也…