我有QTableWidget
用下面的代碼的子類:如何從QTableWidgetItem中提取顯示的文本?
connect(this, SIGNAL(cellChanged(int, int)), this, SLOT(pushCellChange(int, int)), Qt::QueuedConnection);
...
void MyTableView::pushCellChange(int row, int column)
{
QString text(item(row, column)->text());
QByteArray data = text.toAscii();
cout << data.length() << endl;
const char* cellData = text.toAscii().constData();
cout << "Cell ("<<row<<", "<<column<<") changed to: " << cellData << endl;
}
當我右上細胞改變到任何此輸出:
2
Cell (0, 0) changed to: ▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌░▬∟C▌▌
然而,雖然該損壞的數據被噴出了上控制檯,表格部件本身似乎表現正常,並顯示正確的字符串。有人知道這裏發生了什麼嗎?
這解決了問題;幫助我理解爲什麼。我認爲在C++中,一個變量不會被破壞,直到它超出範圍,並且'data'在cout'聲明之後才真正超出範圍。如果編譯器不使用,實際上是否允許先回收它? – Calvin 2012-03-28 03:46:46
@Calvin'data'沒有超出範圍...但是你沒有指向'data'的指針。 'const char * cellData = data.constData()'會工作;相反,你在做'text.toAscii()。constData()'。看到不同? – tmpearce 2012-03-28 04:53:19
啊哈!這就說得通了。謝謝! =) – Calvin 2012-03-28 20:27:41