提问人:Anon 提问时间:12/21/2016 更新时间:6/15/2023 访问量:10087
在 Qt 中;将QString中每个单词的首字母大写的最佳方法是什么?
In Qt; what is the best method to capitalise the first letter of every word in a QString?
问:
我正在考虑正则表达式,但这并不完全可读。还有一些功能需要考虑,可能还有其他事情要考虑。s.toUpper()
那么,在QString中将单词的第一个字母大写的最佳方法是什么?
答:
10赞
thuga
12/22/2016
#1
使用此示例作为参考,您可以执行如下操作:
QString toCamelCase(const QString& s)
{
QStringList parts = s.split(' ', QString::SkipEmptyParts);
for (int i = 0; i < parts.size(); ++i)
parts[i].replace(0, 1, parts[i][0].toUpper());
return parts.join(" ");
}
1赞
Rolling Panda
6/25/2020
#2
完全相同,但写法不同:
QString toCamelCase(const QString& s)
{
QStringList cased;
foreach (QString word, s.split(" ", QString::SkipEmptyParts))cased << word.at(0).toUpper() + word.mid(1);
return cased.join(" ");
}
这会使用更多内存,但没有指针访问(无括号运算符)。
-2赞
Folco
4/7/2022
#3
不可思议的 C++/Qt...你只是想得到一些带有0x20的字符......
评论
0赞
Wisblade
1/9/2023
是的,当然,当字符串可以是 Unicode、UTF-8、非拉丁等时,总是努力使 ASCII“大写”。
1赞
darrenp
6/23/2022
#4
还有另一种方法可以做到这一点,即使用对单词的引用进行迭代,并使用 QChar 引用修改第一个字符:
QString capitalise_each_word(const QString& sentence)
{
QStringList words = sentence.split(" ", Qt::SkipEmptyParts);
for (QString& word : words)
word.front() = word.front().toUpper();
return words.join(" ");
}
请注意,这里需要(就像这个问题的其他答案一样),因为每个单词的第一个字符在大写时被假定存在。此假设不适用于(默认值)。Qt::SkipEmptyParts
Qt::KeepEmptyParts
0赞
Thalia
6/15/2023
#5
如果 放置在任何使用 的项目中,则可以使用其属性将文本更改为标题大小写。这是一个例子 - 我的代码很高兴发现了它。QString
QFont
setCapitalization
QFont formatFont = m_formatNameEdit->font();
formatFont.setCapitalization(QFont::Capitalize);
m_formatNameEdit->setFont(formatFont);
评论
QString