使用 Qt,我需要将 QString 中每个单词的第一个字母大写。
我想过使用正则表达式来做到这一点,但这并不完全可读。也许我可以用像
s.toUpper()
这样的函数来做到这一点?
使用此示例作为参考,您可以执行以下操作:
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(" ");
}
还有另一种方法可以做到这一点,即使用对单词的引用进行迭代并使用 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
(默认值)。
完全一样,但写法不同:
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(" ");
}
这使用更多内存,但没有指针访问(没有括号运算符)。
如果
QString
放置在任何使用 QFont
的项目中,您可以使用其 setCapitalization
属性将文本更改为标题大小写。这是一个例子 - 我的代码很高兴发现它。
QFont formatFont = m_formatNameEdit->font();
formatFont.setCapitalization(QFont::Capitalize);
m_formatNameEdit->setFont(formatFont);