在Qt中;将 QString 中每个单词的第一个字母大写的最佳方法是什么?

问题描述 投票:0回答:6

我正在考虑正则表达式,但这并不完全可读。还有像

s.toUpper()
这样的函数需要考虑,可能还有其他的事情。

那么将 QString 中单词的第一个字母大写的最佳方法是什么?

c++ regex string qt qstring
6个回答
10
投票

使用此示例作为参考,您可以执行以下操作:

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(" ");
}

2
投票

还有另一种方法可以做到这一点,即使用对单词的引用进行迭代并使用 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
(默认值)。


1
投票

完全一样,但写法不同:

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(" ");
}

这使用更多内存,但没有指针访问(没有括号运算符)。


0
投票

如果

QString
放置在任何使用
QFont
的项目中,您可以使用其
setCapitalization
属性将文本更改为标题大小写。这是一个例子 - 我的代码很高兴发现它。

QFont formatFont = m_formatNameEdit->font();
formatFont.setCapitalization(QFont::Capitalize);
m_formatNameEdit->setFont(formatFont);

感谢来自Qt中心主题的回答:如何将字符串大写


0
投票
str = str.toLower();
str[0] = str[0].toUpper();

-3
投票

令人难以置信的 C++/Qt...你只是想用 0x20 获得一些字符...

© www.soinside.com 2019 - 2024. All rights reserved.