0

私の問題は、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 も試してみましたが、やはりうまくいきませんでした。実行時にすべてのデータを表示したい、または表示できるデータの一部を表示したい。死ぬと最初の段落だけで止まるからです。また、テキストファイルから読み取ってデータを表示したくありません。

この状況に直面している人はいますか?

前もって感謝します。

4

1 に答える 1

0

実際、実行時にこのデータを保持することはできません。これはハードウェアに大きく依存します。ブロック全体として必要なメモリが見つかる保証はありません。

そこで、 QPlainTextEditsetMaximumBlockCount(100000)を使用し、コンストラクターで関数を使用して、表示されるテキストを 100000 ブロックに制限しました。でテキストを追加しましthis->appendPlainText(text)た。したがって、出力ウィンドウには常に最後の 100000 ブロックのテキストが表示されます。残りのデータには、テキスト ファイルなどを保持できます。したがって、ユーザーはそこからすべてを見ることができます。

于 2016-02-04T13:55:48.137 に答える