-1

パラメータとして QString オブジェクトが必要な場合は、どこでも c スタイルの文字列だけを使用できることがわかります。たとえば、showMessage関数には QString が必要です。しかし、この関数に C スタイルの文字列を渡したので、すべて問題ありません。"%1 a sample text"つまり、ここではQString オブジェクトと考えることができ ます! 多分!

statusBar()->showMessage("%1 a sample text");

しかし、なぜこのコードを使用できないのでしょうか:

statusBar()->showMessage("%1 a sample text".arg("This is "));
4

2 に答える 2

5

implicit-conversiontoが使用されるため、関数QStringに渡され、関数の呼び出しなしで がないため、メソッドonを呼び出そうとしていますが、これは正しくありません。const char[]implicit-conversionargconst char[]QString

statusBar()->showMessage(QString("%1 a sample text").arg("This is "));

そしてすべてがうまくいくでしょう。

于 2013-05-06T06:24:00.517 に答える
1

の形式のもの"..."はすべてタイプconst char*であり、したがって ではありませんQString。これは、C と互換性を持たなければならない C++ の副作用です。

ただし、特定の状況 (例: operator+) では、 への暗黙的な変換QStringが許可されQString、コンストラクターは型のパラメーターを受け取りますconst char*。ただし、この場合、明示的な変換を使用する必要があります。つまり、

statusBar()->showMessage(QString("%1 a sample text").arg("This is "));
于 2013-05-06T06:26:08.653 に答える