QmlDesigner: Refactor code to use QStringView for improved performance

- Updated `isSignalPropertyName` to use `QStringView` instead of
`QString`.
- Enhanced `fileForFullQrcPath` and `removeFileFromQrcPath` functions to
use `QStringView` for better efficiency.
- Improved handling of signal names and file paths using modern C++
ranges and views.

Change-Id: I09725edba2ef1115cda1997cdeebc19f87ccb0ba
Reviewed-by: Burak Hancerli <burak.hancerli@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Marco Bubke
2025-04-26 17:07:57 +02:00
parent 56c85af3cd
commit f00999d61d

View File

@@ -210,14 +210,14 @@ QString fixEscapedUnicodeChar(const QString &value) //convert "\u2939"
return value; return value;
} }
bool isSignalPropertyName(const QString &signalName) bool isSignalPropertyName(QStringView signalName)
{ {
if (signalName.isEmpty()) if (signalName.isEmpty())
return false; return false;
// see QmlCompiler::isSignalPropertyName // see QmlCompiler::isSignalPropertyName
QStringList list = signalName.split(QLatin1String(".")); auto begin = std::ranges::find(signalName | std::views::reverse, u'.').base();
const QString &pureSignalName = list.constLast(); QStringView pureSignalName = {begin, signalName.end()};
return pureSignalName.length() >= 3 && pureSignalName.startsWith(u"on") return pureSignalName.length() >= 3 && pureSignalName.startsWith(u"on")
&& pureSignalName.at(2).isLetter(); && pureSignalName.at(2).isLetter();
} }
@@ -1626,23 +1626,24 @@ void TextToModelMerger::syncArrayProperty(AbstractProperty &modelProperty,
} }
} }
static QString fileForFullQrcPath(const QString &string) static QString fileForFullQrcPath(QStringView string)
{ {
QStringList stringList = string.split(QLatin1String("/")); auto found = std::ranges::find(string | std::views::reverse, u'/');
if (stringList.isEmpty())
return QString();
return stringList.constLast(); if (found == string.rend())
return {};
return QStringView{found.base(), string.end()}.toString();
} }
static QString removeFileFromQrcPath(const QString &string) static QString removeFileFromQrcPath(const QStringView string)
{ {
QStringList stringList = string.split(QLatin1String("/")); auto found = std::ranges::find(string | std::views::reverse, u'/');
if (stringList.isEmpty())
return QString();
stringList.removeLast(); if (found == string.rend())
return stringList.join(QLatin1String("/")); return {};
return QStringView{string.begin(), std::prev(found.base())}.toString();
} }
void TextToModelMerger::syncVariantProperty(AbstractProperty &modelProperty, void TextToModelMerger::syncVariantProperty(AbstractProperty &modelProperty,