2

QTextBrowser を使用して、追加機能を介して文字列を表示しています。

    void testing::displaytext()
    {   
      qRegisterMetaType<QTextCursor>("QTextCursor");
      ui.textBrowser->append("Welcome to the world of QT");
      ui.textBrowser->append("Welcome to the world of QT");
      ui.textBrowser->append("Welcome to the world of QT");
      ui.textBrowser->append("Welcome to the world of QT");
      ui.textBrowser->append("Welcome to the world of QT");
      ui.textBrowser->append("Welcome to the world of QT");
      ui.textBrowser->append("Welcome to the world of QT");
      ui.textBrowser->append("Welcome to the world of QT");
      ui.textBrowser->append("Welcome to the world of QT");
    }

上記の関数は一定の間隔でスレッドによって呼び出されていますが、呼び出された後、次のエラーがスローされることがあります。

    ASSERT failure in QVector<T>::operator[]: "index out of range", file c:\iwmake\build_vs2010_opensource_________________padding_________________\include\qtcore\../../src/corelib/tools/qvector.h

この例外を解決するにはどうすればよいですか?

4

1 に答える 1

3

クラスとそのすべての子孫にはマルチスレッドの保証がほとんどないQWidgetため、メンバー関数とそのすべての子孫は gui スレッドからのみ呼び出す必要があります。hereに記載されているように、それらは再入可能ではありません。ただし、シグナルを介してスロットをトリガーすることはスレッドセーフであり、問​​題の解決策になる可能性があります。QWidgetQTextBrowser

于 2013-06-05T13:52:47.790 に答える