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行のように絶対に巨大になる可能性があります。約400回の追加の後、このエラーメッセージが表示されます。

ipodGuiLoaderQT.exeの0x65154715で未処理の例外:0xC0000005:アクセス違反の読み取り場所0xfdfdfe11。

これは通常、メモリオーバーフローがあることを示しますが、textBrowserのメモリを制御できませんか、それとも完全に間違った方向に進んでいますか?

編集

小さな変更を加えました。現在、文字列と呼ばれる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

A をループするQStringList

QStringList呼び出された のすべての要素を取得してlistに表示するに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 に答える