《QDebug 2025年4月》

一、Qt Widgets 问题交流

1.

二、Qt Quick 问题交流

1.QML单例动态创建的对象,访问外部id提示undefined

先定义一个窗口组件,打印外部的id:

// MyWindow.qml
import QtQuick 2.15
import QtQuick.Window 2.15Window {id: controlwidth: 400height: 300visible: falseMouseArea {anchors.fill: parentonClicked: {// transientParent设置parent后可以正常访问console.log(control.transientParent)// 单例创建的不能访问外部的idconsole.log(root)}}
}

单例动态创建MyWindow :

// MySingleton.qml
pragma Singleton
import QtQuick 2.15Item {function createWindow(parent = null){let comp = Qt.createComponent("MyWindow.qml", Component.PreferSynchronous, parent)let win = comp.createObject(parent)return win}
}

测试可以看到在非单例动态创建的对象可以访问外部id,动态创建的不行:

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15Window {id: rootwidth: 640height: 480visible: truetitle: qsTr("GongJianBo")Row {anchors.fill: parentspacing: 10Button {text: "Singleton"onClicked: {let win = MySingleton.createWindow(root)win.show()}}Button {text: "Normal"onClicked: {let comp = Qt.createComponent("MyWindow.qml")let win = comp.createObject(root)win.show()}}}
}

将Window类型替换成Rectangle也是一样的结果。

三、其他

1.Qt5 QImage SmoothTransformation 缩放后格式改变

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

测试代码:

    QImage img = QImage(100, 100, QImage::Format_RGB888);img.fill(Qt::red);qDebug() << img.format();// 输出:QImage::Format_RGB888img = img.scaled(50, 50, Qt::KeepAspectRatio, Qt::SmoothTransformation);qDebug() << img.format();// Qt5输出:QImage::Format_RGB32// Qt6输出:QImage::Format_RGB888

如RGB888变成了RGB32,ARGB32变成了ARGB32_Premultiplied等

从源码一探究竟,scaled函数中调用了transformed函数: 

QImage QImage::scaled(const QSize& s, Qt::AspectRatioMode aspectMode, Qt::TransformationMode mode) const
{if (!d) {qWarning("QImage::scaled: Image is a null image");return QImage();}if (s.isEmpty())return QImage();QSize newSize = size();newSize.scale(s, aspectMode);newSize.rwidth() = qMax(newSize.width(), 1);newSize.rheight() = qMax(newSize.height(), 1);if (newSize == size())return *this;Q_TRACE_SCOPE(QImage_scaled, s, aspectMode, mode);QTransform wm = QTransform::fromScale((qreal)newSize.width() / width(), (qreal)newSize.height() / height());QImage img = transformed(wm, mode);return img;
}

transformed函数中调用了smoothScaled函数:

QImage QImage::transformed(const QTransform &matrix, Qt::TransformationMode mode ) const
{... ...// Make use of the optimized algorithm when we're scalingif (scale_xform && mode == Qt::SmoothTransformation) {if (mat.m11() < 0.0F && mat.m22() < 0.0F) { // horizontal/vertical flipreturn smoothScaled(wd, hd).mirrored(true, true);} else if (mat.m11() < 0.0F) { // horizontal flipreturn smoothScaled(wd, hd).mirrored(true, false);} else if (mat.m22() < 0.0F) { // vertical flipreturn smoothScaled(wd, hd).mirrored(false, true);} else { // no flippingreturn smoothScaled(wd, hd);}}... ...
}

smoothScaled中就需要转换成固定的几种格式来缩放了:

QImage QImage::smoothScaled(int w, int h) const {QImage src = *this;switch (src.format()) {case QImage::Format_RGB32:case QImage::Format_ARGB32_Premultiplied:
#if Q_BYTE_ORDER == Q_LITTLE_ENDIANcase QImage::Format_RGBX8888:
#endifcase QImage::Format_RGBA8888_Premultiplied:
#if QT_CONFIG(raster_64bit)case QImage::Format_RGBX64:case QImage::Format_RGBA64_Premultiplied:break;case QImage::Format_RGBA64:src = src.convertToFormat(QImage::Format_RGBA64_Premultiplied);break;
#endifdefault:if (src.hasAlphaChannel())src = src.convertToFormat(QImage::Format_ARGB32_Premultiplied);elsesrc = src.convertToFormat(QImage::Format_RGB32);}src = qSmoothScaleImage(src, w, h);if (!src.isNull())copyMetadata(src.d, d);return src;
}QImage qSmoothScaleImage(const QImage &src, int dw, int dh)
{QImage buffer;if (src.isNull() || dw <= 0 || dh <= 0)return buffer;int w = src.width();int h = src.height();QImageScaleInfo *scaleinfo =qimageCalcScaleInfo(src, w, h, dw, dh, true);if (!scaleinfo)return buffer;buffer = QImage(dw, dh, src.format());if (buffer.isNull()) {qWarning("QImage: out of memory, returning null");qimageFreeScaleInfo(scaleinfo);return QImage();}#if QT_CONFIG(raster_64bit)if (src.depth() > 32)qt_qimageScaleRgba64(scaleinfo, (QRgba64 *)buffer.scanLine(0),dw, dh, dw, src.bytesPerLine() / 8);else
#endifif (src.hasAlphaChannel())qt_qimageScaleAARGBA(scaleinfo, (unsigned int *)buffer.scanLine(0),dw, dh, dw, src.bytesPerLine() / 4);elseqt_qimageScaleAARGB(scaleinfo, (unsigned int *)buffer.scanLine(0),dw, dh, dw, src.bytesPerLine() / 4);qimageFreeScaleInfo(scaleinfo);return buffer;
}

查看Qt6的代码,发现调用smoothScaled后又转换回原格式了:

QImage Q_TRACE_INSTRUMENT(qtgui) QImage::transformed(const QTransform &matrix, Qt::TransformationMode mode ) const
{... ...if (scale_xform && mode == Qt::SmoothTransformation) {switch (format()) {case QImage::Format_RGB32:case QImage::Format_ARGB32_Premultiplied:
#if Q_BYTE_ORDER == Q_LITTLE_ENDIANcase QImage::Format_RGBX8888:
#endifcase QImage::Format_RGBA8888_Premultiplied:
#if QT_CONFIG(raster_64bit)case QImage::Format_RGBX64:case QImage::Format_RGBA64_Premultiplied:
#endifcase QImage::Format_CMYK8888:// Use smoothScaled for scaling when we can do so without conversion.if (mat.m11() > 0.0F && mat.m22() > 0.0F)return smoothScaled(wd, hd);break;default:break;}// Otherwise only use it when the scaling factor demands it, or the image is large enough to scale multi-threadedif (nonpaintable_scale_xform
#if QT_CONFIG(thread) && !defined(Q_OS_WASM)|| (ws * hs) >= (1<<20)
#endif) {QImage scaledImage;if (mat.m11() < 0.0F && mat.m22() < 0.0F) { // horizontal/vertical flipscaledImage = smoothScaled(wd, hd).mirrored(true, true);} else if (mat.m11() < 0.0F) { // horizontal flipscaledImage = smoothScaled(wd, hd).mirrored(true, false);} else if (mat.m22() < 0.0F) { // vertical flipscaledImage = smoothScaled(wd, hd).mirrored(false, true);} else { // no flippingscaledImage = smoothScaled(wd, hd);}switch (format()) {case QImage::Format_Mono:case QImage::Format_MonoLSB:case QImage::Format_Indexed8:return scaledImage;default:return scaledImage.convertToFormat(format());}}}... ...
}
2.Qt Creator 15/16 等新版本工具菜单没有翻译相关选项

Qt Creator 15/16 等新版本的工具菜单中,外部选项里没有翻译相关选项了,但是可以手动添加回去,参考:https://blog.csdn.net/weixin_53735713/article/details/144442073

在外部配置选项里选择添加工具:

// 新增工具-更新翻译lupdate
%{CurrentDocument:Project:QT_INSTALL_BINS}\lupdate
%{CurrentDocument:Project:FilePath}
%{CurrentDocument:Project:Path}// 新增工具-发布翻译lrelease
%{CurrentDocument:Project:QT_INSTALL_BINS}\lrelease
%{CurrentDocument:Project:FilePath}
%{CurrentDocument:Project:Path}

三行分别对应:执行档,参数,工作目录,在测试时参数前面多加了个空格导致执行参数有问题。

 

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

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

相关文章

JS | 正则 · 常用正则表达式速查表

以下是前端开发中常用的正则表达式速查表&#xff0c;包含验证规则、用途说明与示例&#xff1a; &#x1f4cc; 常用正则表达式速查表 名称正则表达式描述 / 用途示例手机号/^1[3-9]\d{9}$/中国大陆手机号13812345678 ✅座机号/^0\d{2,3}-?\d{7,8}$/固定电话010-12345678 ✅…

系统思考:个人与团队成长

四年前&#xff0c;我交付的系统思考项目&#xff0c;今天学员的反馈依然深深触动了我。 我常常感叹&#xff0c;系统思考不仅仅是一场培训&#xff0c;更像是一场持续的“修炼”。在这条修炼之路上&#xff0c;最珍贵的&#xff0c;便是有志同道合的伙伴们一路同行&#xff0…

写屏障和读屏障的区别是什么?

写屏障&#xff08;Write Barrier&#xff09;与读屏障&#xff08;Read Barrier&#xff09;的区别 在计算机科学中&#xff0c;写屏障和读屏障是两种关键的内存同步机制&#xff0c;主要用于解决并发编程中的可见性、有序性问题&#xff0c;或在垃圾回收&#xff08;GC&…

ssh -T git@github.com 测试失败解决方案:修改hosts文件

问题描述 通过SSH方式测试&#xff0c;使用该方法测试连接可能会遇到连接超时、端口占用的情况&#xff0c;原因是因为DNS配置及其解析的问题 ssh -T gitgithub.com我们可以详细看看建立 ssh 连接的过程中发生了什么&#xff0c;可以使用 ssh -v命令&#xff0c;-v表示 verbo…

大疆无人机搭载树莓派进行目标旋转检测

环境部署 首先是环境创建&#xff0c;创建虚拟环境&#xff0c;名字叫 pengxiang python -m venv pengxiang随后激活环境 source pengxiang/bin/activate接下来便是依赖包安装过程了: pip install onnxruntime #推理框架 pip install fastapi uvicorn[standard] #网络请求…

00 Ansible简介和安装

1. Ansible概述与基本概念 1.1. 什么是Ansible&#xff1f; Ansible 是一款用 Python 编写的开源 IT 自动化工具&#xff0c;主要用于配置管理、软件部署及高级工作流编排。它能够简化应用程序部署、系统更新等操作&#xff0c;并且支持自动化管理大规模的计算机系统。Ansibl…

Linxu实验五——NFS服务器

一.NFS服务器介绍 NFS服务器&#xff08;Network File System&#xff09;是一种基于网络的分布式文件系统协议&#xff0c;允许不同操作系统的主机通过网络共享文件和目录3。其核心作用在于实现跨平台的资源透明访问&#xff0c;例如在Linux和Unix系统之间共享静态数据&#…

『 测试 』测试基础

文章目录 1. 调试与测试的区别2. 开发过程中的需求3. 开发模型3.1 软件的生命周期3.2 瀑布模型3.2.1 瀑布模型的特点/缺点 3.3 螺旋模型3.3.1 螺旋模型的特点/缺点 3.4 增量模型与迭代模型3.5 敏捷模型3.5.1 Scrum模型3.5.2 敏捷模型中的测试 4 测试模型4.1 V模型4.2 W模型(双V…

红外遥控键

红外 本章节旨在让用户自定义红外遥控功能&#xff0c;需要有板载红外接收的板卡。 12.1. 获取红外遥控键值 由于不同遥控器厂家定义的按键键值不一样&#xff0c;所以配置不通用&#xff0c;需要获取实际按键对应的键值。 1 2 3 4 5 6 #设置输出等级 echo 7 4 1 7> /pr…

同一个虚拟环境中conda和pip安装的文件存储位置解析

文章目录 存储位置的基本区别conda安装的包pip安装的包 看似相同实则不同的机制实际路径示例这种差异带来的问题如何检查包安装来源最佳实践建议 总结 存储位置的基本区别 conda安装的包 存储在Anaconda(或Miniconda)目录下的pkgs和envs子目录中&#xff1a; ~/anaconda3/en…

机器学习极简入门:从基础概念到行业应用

有监督学习&#xff08;supervised learning&#xff09; 让模型学习的数据包含正确答案&#xff08;标签&#xff09;的方法&#xff0c;最终模型可以对无标签的数据进行正确处理和预测&#xff0c;可以分为分类与回归两大类 分类问题主要是为了“尽可能分开整个数据而画线”…

split和join的区别‌

split和join是Python中用于处理字符串的两种方法&#xff0c;它们的主要区别在于功能和使用场景。‌ split()方法 ‌split()方法用于将字符串按照指定的分隔符分割成多个子串&#xff0c;并返回这些子串组成的列表‌。如果不指定分隔符&#xff0c;则默认分割所有的空白字符&am…

MySQL从入门到精通(二):Windows和Mac版本MySQL安装教程

目录 MySQL安装流程 &#xff08;一&#xff09;、进入MySQL官网 &#xff08;二&#xff09;、点击下载&#xff08;Download&#xff09; &#xff08;三&#xff09;、Windows和Mac版本下载 下载Windows版本 下载Mac版本 &#xff08;四&#xff09;、验证并启动MySQL …

LeetCode 解题思路 45(分割等和子集、最长有效括号)

解题思路&#xff1a; dp 数组的含义&#xff1a; 在数组中是否存在一个子集&#xff0c;其和为 i。递推公式&#xff1a; dp[i] | dp[i - num]。dp 数组初始化&#xff1a; dp[0] true。遍历顺序&#xff1a; 从大到小去遍历&#xff0c;从 i target 开始&#xff0c;直到 …

电影感户外哑光人像自拍摄影Lr调色预设,手机滤镜PS+Lightroom预设下载!

调色详情 电影感户外哑光人像自拍摄影 Lr 调色&#xff0c;是借助 Lightroom 软件&#xff0c;针对户外环境下拍摄的人像自拍进行后期处理。旨在模拟电影画面的氛围与质感&#xff0c;通过调色赋予照片独特的艺术气息。强调打造哑光效果&#xff0c;使画面色彩不过于浓烈刺眼&a…

使用 NV‑Ingest、Unstructured 和 Elasticsearch 处理非结构化数据

作者&#xff1a;来自 Elastic Ajay Krishnan Gopalan 了解如何使用 NV-Ingest、Unstructured Platform 和 Elasticsearch 为 RAG 应用构建可扩展的非结构化文档数据管道。 Elasticsearch 原生集成了行业领先的生成式 AI 工具和提供商。查看我们的网络研讨会&#xff0c;了解如…

Android 13 使能user版本进recovery

在 debug 版本上&#xff0c;可以在关机状态下&#xff0c;同时按 电源键 和 音量加键 进 recovery 。 user 版本上不行。 参考 使用 build 变体 debug 版本和 user 版本的差别之一就是 ro.debuggable 属性不同。 顺着这个思路追踪&#xff0c;找到 bootable/recovery/reco…

每日算法刷题计划

这是我每天坚持刷算法题的仓库&#xff0c;每天刷1-3道&#xff0c;时间30-40min&#xff0c;加油! 目前考虑leetcode洛谷形式&#xff0c;c和python3语言&#xff0c;leetcode主要学核心思想&#xff0c;洛谷学会输入输出格式 每日打卡:markdowncsdn打卡 刷题策略: 按分类刷…

红黑树():

1. 红黑树&#xff1a; 红黑树从根节点开始的最长的路径不会超过最短路径的2倍。 红黑树的话&#xff0c;他的结点的分布没有我们的AVL树的结点的分布均衡&#xff0c;但是效率也不错&#xff0c;AVL树的结点分布的那么均匀&#xff0c;其实也是在进行了旋转&#xff0c;付出了…

【AI智能推荐系统】第六篇:隐私保护与联邦学习在推荐系统中的平衡之道

第六篇:隐私保护与联邦学习在推荐系统中的平衡之道 提示语:🔥 “数据不出域,推荐更精准!深度揭秘腾讯、蚂蚁集团如何用联邦学习打造合规推荐系统,隐私计算技术全景解析与工业级实现方案!” 目录 隐私保护的行业挑战隐私计算技术体系 2.1 联邦学习基础架构2.2 差分隐私…