gpt4 book ai didi

c++ - QTextEdit 的内存问题

转载 作者:太空宇宙 更新时间:2023-11-04 12:14:52 26 4
gpt4 key购买 nike

我正在尝试使用 QTextEdit 输出 QstringList

例如

void CTextBox::AddText(QStringList list, QStringList animList)
{
//CGraphics* graphics = CGraphics::GetInst();

//QStandardItem *baseItem = new StandardItem("Hello");
//textBrowser = new QTextEdit();
standardModel->clear();
rootNode = standardModel->invisibleRootItem();
treeView->setModel(standardModel);

QString string;

//std::string = list[i].

QDataStream* data = new QDataStream;

int j = 0;
int k = 0;

for (int i = 0; i < (list.size()); i++)
{
//string += list[i];
//string += hierarchyList[i];
// textBrowser->setText(string);
string.append(list[i]);
//textBrowser->append(list[i]);

if (list[i].contains("Is Parent"))
{
standardItems[j] = new QStandardItem(list[i-1]);
/*for (int k = 0; k < j; k++)
{
if (standardItems[j]->contains(st))
{
}
}*/
rootNode->appendRow(standardItems[j]);
//k = j;
j++;
}
else if (list[i].contains("inherits from"))
{
standardItems[j] = new QStandardItem(list[i-1]);
for(k = 0; k < j; k++)
{
if (standardItems[k]->text() ==list[i+1])
{
standardItems[k]->appendRow(standardItems[j]);
break;
}
}
//standardItems[k]->appendRow(standardItems[j]);
j++;
}
//textBrowser->setText("Hello");
}

for (int i = 0; i < (animList.size()); i++)
{
string.append(animList[i]);
//textBrowser->append(animList[i]);
}

textBrowser->setText(string);

treeView->setModel(standardModel);
//CGraphics* graphics = CGraphics::GetInst();
//graphics->Render();
}

但是列表的大小绝对可以达到 1700 行。在大约 400ish 附加后,我收到此错误消息。

Unhandled exception at 0x65154715 in ipodGuiLoaderQT.exe: 0xC0000005: Access violation reading location 0xfdfdfe11.

这通常表示存在内存溢出,但我无法控制 textBrowser 的内存,还是我走错了路?

编辑

我做了一个小改动,我现在将列表元素添加到名为 string 的 Qstring,然后在循环结束时设置文本。

例如

textBrowser->setText(string);

我仍然遇到同样的问题。

最佳答案

您确定要附加到 QTextEditith<​​ 元素是有效的列表元素吗?使用 [] 运算符时要小心:

Returns the item at index position i as a modifiable reference. i must be a valid index position in the list (i.e., 0 <= i < size()).

如果 i 大于或等于 list.count() 那么这可能是您崩溃的根源。

为了检查 QTextEdit 没有问题,您可以尝试以下操作:

for (unsigned i=0; i<50000; i++)
textBrowser->append("Dummy String Row");

如果上述代码导致异常(我认为不可能),请告诉我们。否则列表本身应该有问题,或者更可能是您处理列表的代码。

编辑:关于您的代码的一些问题

standardItems[j] = new QStandardItem(list[i-1]);

如果 i==0 list[-1] 无效并且可能是崩溃的原因

if (standardItems[k]->text() ==list[i+1])

类似地,如果 i==list.count()-1 i+1 不是一个有效的索引,那么异常的另一个原因

循环遍历 QStringList

为了获取名为 listQStringList 的所有元素并将它们显示在 QTextEdit 上,您可以执行以下操作:

for (unsigned i=0; i<list.count(); i++)
textBrowser->append(list[i]);

这会很好用。

关于c++ - QTextEdit 的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8182311/

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