36

誰もが大好き

QString("Put something here %1 and here %2")
    .arg(replacement1)
    .arg(replacement2);

replacement1しかし、実際に含まれている、%1または%2どこにでもあるわずかな可能性があるとすぐに、物事はかゆくなります。次に、2 番目QString::arg()は、再導入されたもののみ、%1または両方の%2オカレンスを置き換えます。とにかく、"%1"おそらく意図したリテラルを取得できません。

これを克服するための標準的なトリックはありますか?

遊ぶための例が必要な場合は、これを取ってください

#include <QCoreApplication>
#include <QDebug>

int main()
{
    qDebug() << QString("%1-%2").arg("%1").arg("foo");
    return 0;
}

これは出力されます

"foo-%2"

それ以外の

"%1-foo"

予想どおりです(そうではありません)。

    qDebug() << QString("%1-%2").arg("%2").arg("foo");

与える

"foo-foo"

    qDebug() << QString("%1-%2").arg("%3").arg("foo");

与える

"%3-foo"
4

3 に答える 3

32

QString::arg()に関する Qt ドキュメントを参照してください。

QString str;
str = "%1 %2";
str.arg("%1f", "Hello"); // returns "%1f Hello"
于 2011-03-09T17:30:33.337 に答える
7

arg()複数の引数のオーバーロードは QString のみを取ることに注意してください。すべての引数が QString ではない場合、フォーマット文字列のプレースホルダーの順序を変更できます。

QString("1%1 2%2 3%3 4%4").arg(int1).arg(string2).arg(string3).arg(int4);

になる

QString("1%1 2%3 3%4 4%2").arg(int1).arg(int4).arg(string2, string3);

このように、文字列以外のすべてが最初に置き換えられ、次にすべての文字列が同時に置き換えられます。

于 2017-09-15T07:10:45.717 に答える