c++ - QTextEdit的内存问题

  显示原文与译文双语对照的内容
0 0

我正在尝试使用QTextEdit来输出 QstringList

e.g


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 秒之后,我得到了这个错误消息。

ipodGuiLoaderQT.exe 中 0 x65154715处未处理的异常: 0 xC0000005: 读取位置 0 xfdfdfe11访问冲突。

这通常表明内存溢出,但我不能控制textBrowser的内存,或者我在完全错误的轨道上?

编辑

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

e.g


textBrowser->setText(string);

我还是有同样的问题。

时间: 原作者:

0 0

你确定要追加到 QTextEditith 元素是有效的列表元素。 在使用 [] 运算符时是 carefuls:

将索引位置处的项作为可以修改引用返回。 我必须是列表( 。例如,0 <= i <大小( ) 中的有效索引位置) 。

如果 i 大于或者等于 list.count(),那么这可能是你崩溃的root 。

为了检查 QTextEdit 是否存在问题,可以尝试以下操作:


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

如果上面的代码导致异常( 我觉得不可能),请告诉我们。 否则列表本身会出现问题,或者更可能是处理列表的代码。

EDIT: 有关代码的一些问题


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

如果 i==0 是无效的,可能导致崩溃的原因


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

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

一个 QStringList循环

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


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

这可以正常工作。

0 0

如果你确定问题没有来自 list的内容,那么我打开一个答案,然后它可以能与 standardItems array 相关。 你能告诉我它是如何初始化的? 也许你试图把它从界限中分离出来

...