Qt在QVector中输入ASSERT失败<t> :: operator []:QTextBrowser中的“索引超出范围”</t>

时间:2013-06-05 13:34:03

标签: c++ visual-studio-2010 qt

我正在使用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

如何解决此异常?

1 个答案:

答案 0 :(得分:3)

你应该只从gui线程中调用QWidget及其所有后代的成员函数,因为类QWidget以及包括QTextBrowser在内的所有后代都几乎没有任何多线程担保。它们甚至不是reentrant所记录的here。但是,通过信号触发插槽是线程安全的,可能是您的问题的解决方案。