我想在此添加一個新行。這是我的示例代碼:如何在Qt中追加這個?
ui->button->setText(" Tips " + "\n" + TipsCount);
這是它顯示了錯誤:
類型的無效操作數的常量字符[7]'和 '爲const char [2]' 爲二進制 '運算符+'
但是當我添加標籤它會被追加!
ui->label->setText(name + "\n" + City);
有人能幫我嗎?
我想在此添加一個新行。這是我的示例代碼:如何在Qt中追加這個?
ui->button->setText(" Tips " + "\n" + TipsCount);
這是它顯示了錯誤:
類型的無效操作數的常量字符[7]'和 '爲const char [2]' 爲二進制 '運算符+'
但是當我添加標籤它會被追加!
ui->label->setText(name + "\n" + City);
有人能幫我嗎?
這是C++中的一個非常常見的問題(通常不僅僅是QT)。
感謝操作符重載的魔力,name + "\n"
變成了一個方法調用(無法說出哪一個,因爲你沒有列出類型)。換句話說,因爲這兩件事中的一件是+
重載的對象。
但是,當你嘗試做"abc" + "de"
,它爆炸了。原因是因爲編譯器試圖將兩個數組一起添加。它不理解你的意思是串聯,並試圖把它當作算術運算。
要更正此問題,請將字符串文字包裝爲適當的字符串對象類型(最有可能爲std::string
或QString
)。
這裏是一個小案例:
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
一樣。
不過你看到的行爲在一個和b展示我們在某種程度上能夠一個字符串添加到對象。這來自哪裏左操作數是正確的爲QString是Qt擁有兩種情況定義的全局運算符重載的事實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
但如果連這不存在,你就必須調用一個成員函數。例如,追加():
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));
謝謝您的回答!巴特它工作正常!!! :) ui-> button-> setText(QString(「Tips」)+「\ n」+ TipsCount); – Naufal
@Naufal我已經刪除了我的答案。這個人在解釋「爲什麼」方面做得更好。如果這回答你的問題(我認爲它的確如此),那麼你可以接受它作爲答案。 – Bart
嗨巴特,我在按鈕中獲取文本在中心,我可以對齊按鈕的底部..有沒有任何財產或代碼要加? – Naufal