如何在Qt中附加这个?

时间:2011-12-09 06:27:11

标签: qt

我想在此添加一个新行。这是我的示例代码:

ui->button->setText(" Tips " + "\n" + TipsCount );

这是它显示的错误:

  

类型'const char [7]'和'const char [2]'到二进制'operator +'的无效操作数

但是当我添加到标签时,它会被附加!

 ui->label->setText(name + "\n" + City );

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:5)

这是C ++中一个非常常见的问题(一般而言,不仅仅是QT)。

由于运算符重载的神奇之处,name + "\n"变成了一个方法调用(由于你没有列出类型,所以无法说出哪一个)。换句话说,因为其中一个是+重载的对象,所以它可以工作。

然而,当你尝试"abc" + "de"时,它会爆炸。原因是编译器尝试将两个数组一起添加。它不明白你的意思是连接,并试图把它当作算术运算。

要更正此问题,请将字符串文字包装在相应的字符串对象类型中(std::stringQString)。

答案 1 :(得分:2)

这是一个小案例研究:

QString h = "Hello";               // works
QString w = "World";               // works too, of course

QString a = h + "World";           // works
QString b = "Hello" + w;           // also works

QString c = "Hello" + "World";     // does not work
C ++中的

字符串文字(引号中的文本)不是对象,也没有方法......就像数值不是对象一样。要使字符串开始表现为“类似对象”,它必须被包装到一个对象中。 QString是其中一个包装对象,就像C ++中的std::string一样。

然而,您在 a b 中看到的行为表明我们能够以某种方式将字符串文字添加到对象。这是因为Qt已经为左操作数是一个QString且右边为const char*的情况定义了全局运算符重载:

http://doc.qt.nokia.com/latest/qstring.html#operator-2b-24

...以及左边是const char*而右边是QString的另一种情况:

http://doc.qt.nokia.com/latest/qstring.html#operator-2b-27

如果那些不存在那么你将不得不写:

QString a = h + QString("World");
QString b = QString("Hello") + w;

如果你愿意,你仍然可以这样做。在这种情况下,您将导致运行的两个操作数的加法重载为QString:

http://doc.qt.nokia.com/latest/qstring.html#operator-2b-24

但即使 不存在,也必须调用成员函数。例如,append():

http://doc.qt.nokia.com/latest/qstring.html#append

实际上,您可能会注意到向字符串附加整数没有重载。 (但是char只有一个。)因此,如果你的TipsCount是一个整数,你必须找到一些方法将它变成一个QString。静态number()方法是单向的。

http://doc.qt.nokia.com/latest/qstring.html#number

所以你可能会发现你需要:

ui->button->setText(QString(" Tips ") + "\n" + QString::number(TipsCount));