Моя проблема в том, что QTextBrowser не может показать все данные, которые добавлены к нему.
Я использую qt5.4 на Windows.
Мой класс, как это:
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 вместо этого, но снова не смог добиться успеха. Я хочу показать все данные во время выполнения или какую-то их часть, которые могут быть показаны. Потому что он останавливается только первый абзац, когда он умирает. Кроме того, я не хочу показывать данные путем чтения из текстового файла.
Кто-нибудь сталкивался с такой ситуацией?
Заранее спасибо.
Собственно, я решил, что для этого нет подходящего решения, вы не можете хранить эти данные во время выполнения, это очень зависит от аппаратного обеспечения. У вас нет гарантии, чтобы найти необходимую память в целом блоке.
Так что я использовал QPlainTextEdit и ограничен показанным текстом как 100000 блоков с помощью setMaximumBlockCount(100000)
функция в конструкторе. Я добавил текст с this->appendPlainText(text)
, Таким образом, выходные окна всегда показывают последние 100000 блоков текста. Остальные данные могут содержать текстовый файл или что-то в этом роде. Таким образом, пользователь может посмотреть их все оттуда.
Других решений пока нет …