《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.pswp.cn/diannao/82565.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82565.shtml
英文地址,請注明出處:http://en.pswp.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 差分隱私…