-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-conversiontoQString将被使用,当传递const char[]给函数时,没有implicit-conversion,没有调用函数,所以,你试图调用方法argon const 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+隐式转换为,构造函数采用 类型的参数也是如此。但是,在这种情况下,您需要使用显式转换,即QStringQStringconst char*

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