1

我正在尝试使用 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 追加后,我收到此错误消息。

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

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

编辑

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

例如

textBrowser->setText(string);

我仍然有同样的问题。

4

2 回答 2

1

您确定ith要附加到的QTextEdit元素是有效的列表元素。使用运算符时要小心[]

返回索引位置 i 处的项目作为可修改的引用。i 必须是列表中的有效索引位置(即 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一个有效的索引,那么另一个异常原因

循环虽然 AQStringList

为了获取QStringList被调用的所有元素list并将它们显示在 a 上,QTextEdit您可以执行以下操作:

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

这将正常工作。

于 2011-11-18T13:04:10.100 回答
0

我在这里打开一个答案,不要让评论列表超载:)如果您确定问题不是来自内容,list那么它可能与standardItems数组有关。你能告诉它是如何初始化的吗?也许您尝试越界访问它

于 2011-11-25T13:05:17.600 回答