【问题标题】:When to use QString{...}, tr(...) and +=/append?何时使用 QString{...}、tr(...) 和 +=/append?
【发布时间】:2017-11-20 19:41:51
【问题描述】:

关于QString 可以做什么的信息在广泛的Qt 文档中广泛传播。但是由于信息溢出,我不确定什么时候应该使用最好的工具。

对于一个来自表单的简单报告生成器,我现在有了这段代码,主要依靠trarg 为最终的QString 创建QMessageBox

void Dialog::analyseDialog() {
    QString str{};
    if( ui.lineEdit->text().isEmpty()) {
        str += tr("Name: keine Angaben\n");
    } else {
        str += tr("Name: %1\n").arg(ui.lineEdit->text());
    }
    if( ui.spinBox->cleanText().isEmpty()) {
        str += tr("Geburtsdatum: keine Angaben\n");
    } else {
        str += tr("Geburtsdatum: %1\n").arg(ui.spinBox->cleanText());
    }
    if( ui.radioButton->isChecked()) {
        str += tr("Geschlecht: weiblich\n");
    } else {
        str += tr("Geschlecht: männlich\n");
    }
    QMessageBox::information(0, tr("Die Auswertung"), str);
}

但我不确定这是否正确使用:

  • 如果我不希望本地化,使用 tr() 是否合适?
  • 还是应该改用QString{...}-c'tor?
  • +=(或.append)对 Qt 有效吗?它应该在内部使用QStringBuffer。有时...错误...什么?
  • 或者有更好的方法吗?

【问题讨论】:

  • 1) 我会为每个可翻译的字符串使用tr(即使你现在不打算翻译它)。对于显示给用户的几乎每个字符串都是如此,但对于查询字符串等技术字符串则不然。 2)我不太关心效率,因为每种方法几乎总是足够快。 Qt 分配额外的空间以避免频繁的重新分配。结论:你的方法对我来说似乎是正确的。

标签: qt string-concatenation qstring


【解决方案1】:

问:+=(或 .append)对 Qt 有效吗?它应该在内部使用 QStringBuffer 。有时...错误...什么?

A:你可能有java经验,在java中,String是不可修改的,你通过创建一个新的String来连接它,这就是为什么java推荐使用StringBuffer,在C++中,std::string或QString是一个类向量目的, 类似 java 中的 StringBuffer,所以 += 或 append 是有效的

【讨论】:

    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多