C++ 为什么可以';我在这里使用QString::arg函数吗?

C++ 为什么可以';我在这里使用QString::arg函数吗?,c++,qt,qstring,C++,Qt,Qstring,您知道,在任何需要QString对象作为参数的地方,您都可以只使用c样式的字符串。例如,showMessage函数需要QString。但是我给这个函数传递了一个C风格的字符串,一切都正常。我的意思是,在这里我们可以把%1一个示例文本“看作一个QString对象!也许吧 statusBar()->showMessage("%1 a sample text"); 但是为什么我们不能使用这个代码: statusBar()->showMessage("%1 a sample text".a

您知道,在任何需要QString对象作为参数的地方,您都可以只使用c样式的字符串。例如,
showMessage
函数需要QString。但是我给这个函数传递了一个C风格的字符串,一切都正常。我的意思是,在这里我们可以把
%1一个示例文本“
看作一个QString对象!也许吧

statusBar()->showMessage("%1 a sample text");
但是为什么我们不能使用这个代码:

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

由于将使用
隐式转换
QString
,当将
常量字符[]
传递到函数时,没有
隐式转换
,而不调用函数,因此,您尝试在
常量字符[]
上调用方法
arg
,这是不正确的,请通过以下方式构造
QString

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

一切都会好起来。

任何形式的
“…”
都是
常量字符*
类型,因此不是
QString
。这是C++与C<P/P兼容的副作用。 但是,在某些情况下(例如,
operator+
),允许隐式转换为
QString
,因为
QString
有一个构造函数,其参数类型为
const char*
。然而,在这种情况下,您需要使用显式转换,即

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

哦,不!为什么不投票!?如果此代码是继承QObject的类的一部分,则可以使用QObject::tr()方法编写更少的符号。tr(“%1 a示例文本”).arg(“这是”)