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

Why can't I use QString::arg function here?

本文关键字:arg 函数 QString 不能 在这里 为什么      更新时间:2023-10-16

您知道在任何需要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 "));

因为implicit-conversionQString将被使用,当传递const char[]到功能时,没有implicit-conversion,没有调用功能,所以,您试图在const char[]上调用arg方法,这是不正确的,通过

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

一切都会好起来的

任何形式为"..."的都是const char*类型,因此不是QString。这是c++必须与C兼容的副作用。

然而,在某些情况下(例如operator+),允许隐式转换到QString,因为QString有一个接受const char*类型形参的构造函数。然而,在这种情况下,您需要使用显式转换,即

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