gpt4 book ai didi

c++ - 如何从 QTableWidgetItem 中提取显示的文本?

转载 作者:行者123 更新时间:2023-11-27 23:25:20 26 4
gpt4 key购买 nike

我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com