你知道在任何地方你需要一个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 "));
答案 0 :(得分:5)
因为会使用implicit-conversion
到QString
,所以当const char[]
传递给函数且没有implicit-conversion
时,如果没有调用函数,那么,您正试图调用arg
上的方法const char[]
,这是不正确的,通过
QString
statusBar()->showMessage(QString("%1 a sample text").arg("This is "));
一切都会好的。
答案 1 :(得分:1)
"..."
形式的任何内容都属于const char*
类型,因此不属于QString
。这是C ++必须与C兼容的副作用。
但是,在某些情况下(例如operator+
),允许隐式转换为QString
,因为QString
的构造函数采用类型const char*
的参数。但是,在这种情况下,您需要使用显式转换,即
statusBar()->showMessage(QString("%1 a sample text").arg("This is "));