QTextBrowser无法在运行时显示所有数据

时间:2016-02-03 18:11:58

标签: c++ qt5 qtextbrowser

我的问题是QTextBrowser无法显示附加到它的所有数据。 我在Windows上使用qt5.4。 我的班级是这样的:

class InfoTextBrowser : public QTextBrowser
{
    Q_OBJECT

public:
    InfoTextBrowser(QObject *parent);
    ~InfoTextBrowser();
public slots:
        void appendText(const QString& text) {

            try
            {

                this->append(text); 
            }
            catch(std::bad_alloc& e)
            {
                if(!memoryError)
                {
                    QMessageBox::warning(this,"My app", QStringLiteral("Out of Memory"),QMessageBox::Ok);
                    this->clear();
                    memoryError = true;
                }
            }

            QScrollBar* myBar = this->verticalScrollBar();
            if (myBar!=NULL)
                myBar->setValue(myBar->maximum());  
        };
private:
     void contextMenuEvent(QContextMenuEvent *event);   
private:
    bool memoryError;
};

首先我得到bad_alloc异常然后我将我的应用程序移动到64位然后我没有得到任何异常。但是当我运行我的程序时,QTextBrowser会在一段时间后停止显示数据。它死了,无法清除或刷新。

我也试过QPlainTextEdit而不是这个,但我再也没能成功。我想在运行时显示所有数据或显示可能显示的部分数据。因为它在它死亡时仅停止第一段。另外,我不想通过阅读文本文件来显示数据。

有没有人面对这种情况?

提前致谢。

1 个答案:

答案 0 :(得分:0)

实际上,我认为没有可行的解决办法,你不能在运行时保存这些数据,这很大程度上取决于硬件。您无法保证在整个块中找到所需的内存。

所以我使用QPlainTextEdit并通过在构造函数中使用setMaximumBlockCount(100000)函数将显示的文本限制为100000个块。我在this->appendPlainText(text)附加了文字。因此,输出窗口始终显示最后100000个文本块。其余数据可以包含文本文件或类似的东西。因此,用户可以从那里查看所有这些内容。