作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 QTableWidget
的子类,代码如下:
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▌▌
然而,当这些损坏的数据在控制台上喷出时,表格小部件本身似乎表现正常并显示正确的字符串。有谁知道这里发生了什么?
最佳答案
调用 toAscii()
将 QString
的数据存储到 QByteArray
。在您的代码中,您执行了两次:
QByteArray data = text.toAscii();
const char* cellData = text.toAscii().constData();
_____________^ <-- temporary QByteArray
const char*
实际上是指向临时变量中的数据,在分号处超出范围,此时指针变为无效。相反,如果你要使用局部变量 data
,你会没事的:
const char* cellData = data.constData();
___^ <-- still-in-scope QByteArray
或者,您可以在 cout 中执行所有这些操作,并且数据在复制到输出流时仍然有效:
cout << "Cell ("<<row<<","<<column<<") changed to: " << text.toAscii().constData() << endl;
关于c++ - 如何从 QTableWidgetItem 中提取显示的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9900651/
我是一名优秀的程序员,十分优秀!