From 9f8ea80fe1b629a322712cff56598da76c6e1cf5 Mon Sep 17 00:00:00 2001 From: Wang Yu Date: Thu, 12 Mar 2026 13:47:02 +0800 Subject: [PATCH] fix(ctextedit): fix crash and Qt6 deprecated API usage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add empty check before calling first() on fmts to prevent crash. Use fontFamilies()/setFontFamilies() for Qt 6.1+ compatibility. 添加空检查防止fmts为空时崩溃,Qt 6.1+使用新API替代废弃接口。 Log: 修复文本编辑器崩溃问题及Qt6兼容性 PMS: BUG-352807 Influence: 修复选中空区域时可能崩溃的问题,解决Qt 6.1+编译时的废弃API警告。 --- src/widgets/ctextedit.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/widgets/ctextedit.cpp b/src/widgets/ctextedit.cpp index f17f0b8f4..600863385 100644 --- a/src/widgets/ctextedit.cpp +++ b/src/widgets/ctextedit.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2020 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2020 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -160,14 +160,22 @@ void CTextEdit::setCurrentFontSize(const int sz) QString CTextEdit::currentFontFamily() { +#if QT_VERSION >= QT_VERSION_CHECK(6, 1, 0) + return currentFormat().fontFamilies().toStringList().value(0); +#else return currentFormat().fontFamily(); +#endif } void CTextEdit::setCurrentFontFamily(const QString &family) { qDebug() << "Setting current font family:" << family; QTextCharFormat fmt; +#if QT_VERSION >= QT_VERSION_CHECK(6, 1, 0) + fmt.setFontFamilies(QStringList(family)); +#else fmt.setFontFamily(family); +#endif setCurrentFormat(fmt, true); } @@ -389,11 +397,17 @@ void CTextEdit::updateSelectionFormat() auto fmts = getCharFormats(beginPos, endPos); qDebug() << "Updating selection format - begin:" << beginPos << "end:" << endPos; + //Check for empty to prevent crash when calling first() on empty fmts + if (fmts.isEmpty()) { + _selectionFmt = QTextCharFormat(); + return; + } + //格式数据是否有冲突 QTextCharFormat fmt = fmts.first().format; - + for (int i = 1; i < fmts.count(); ++i) { - QTextCharFormat ft = fmts.at(i).format; + const QTextCharFormat &ft = fmts.at(i).format; for (int j = 0; j < senseProertiesCount; ++j) { QTextCharFormat::Property property = senseProerties[j]; if (fmt.hasProperty(property)) {