C++ 为什么可以';我在这里使用QString::arg函数吗?
您知道,在任何需要QString对象作为参数的地方,您都可以只使用c样式的字符串。例如,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
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(“这是”)