为什么我不能在这里使用QString :: arg函数?

时间:2013-05-06 06:21:03

标签: c++ qt qstring

你知道在任何地方你需要一个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 "));

2 个答案:

答案 0 :(得分:5)

因为会使用implicit-conversionQString,所以当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 "));