我正在考虑正则表达式,但这并不完全可读。还有像s.toUpper()这样的函数需要考虑,可能还有其他的东西。那么,QString中单词首字母大写的最佳方法是什么呢?
s.toUpper()
p3rjfoxz1#
使用this example作为参考,您可以执行以下操作:
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(" "); }
w9apscun2#
完全相同,但写法不同:
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(" "); }
这会占用更多内存,但没有指针访问(没有括号运算符)。
bvn4nwqk3#
还有一种替代方法,它使用对单词的引用进行迭代,并使用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(默认值)中不成立。
Qt::SkipEmptyParts
Qt::KeepEmptyParts
xfyts7mz4#
如果QString放置在任何使用QFont的项目中,则可以使用其setCapitalization属性将文本更改为标题大小写。这里有一个例子--我的代码很高兴发现了它。
QString
QFont
setCapitalization
QFont formatFont = m_formatNameEdit->font(); formatFont.setCapitalization(QFont::Capitalize); m_formatNameEdit->setFont(formatFont);
感谢Qt Centre Thread: How to capitalize a string的回答
o4tp2gmn5#
令人难以置信的C++/Qt...你只想得到一些0x 20的chars...
5条答案
按热度按时间p3rjfoxz1#
使用this example作为参考,您可以执行以下操作:
w9apscun2#
完全相同,但写法不同:
这会占用更多内存,但没有指针访问(没有括号运算符)。
bvn4nwqk3#
还有一种替代方法,它使用对单词的引用进行迭代,并使用QChar引用修改第一个字符:
请注意,这里需要
Qt::SkipEmptyParts
(与此问题的其他答案一样),因为每个单词的第一个字符在大写时假设存在。这个假设在Qt::KeepEmptyParts
(默认值)中不成立。xfyts7mz4#
如果
QString
放置在任何使用QFont
的项目中,则可以使用其setCapitalization
属性将文本更改为标题大小写。这里有一个例子--我的代码很高兴发现了它。感谢Qt Centre Thread: How to capitalize a string的回答
o4tp2gmn5#
令人难以置信的C++/Qt...你只想得到一些0x 20的chars...