Qt QTextEdit имеет большую проблему утечки памяти - PullRequest
0 голосов
/ 31 октября 2019

В моем объекте я отображаю файл журнала в виджете QTextEdit. Затем я обнаружил, что программа потребляет сотни МБ памяти, даже если размер файла журнала невелик. И память не освобождается, когда ее содержимое очищается.

Затем я пишу небольшую демонстрацию в QtCreator с Qt5.12.x, просто помещаю на нее виджет QTextEdit. вызовите функцию добавления, чтобы внедрить в нее QString, проблема повторяется, даже если я удаляю виджет QTextEdit.

MainWindow::MainWindow(QWidget *parent)
{

    QPushButton *btn1  = new QPushButton(this) ;
    QPushButton *btn2  = new QPushButton(this) ;

    txtEdit = new QTextEdit(this) ;


    QHBoxLayout *layout = new QHBoxLayout ;
    layout->addWidget( btn1 ) ;
    layout->addWidget( btn2 ) ;
    layout->addWidget(txtEdit ) ;

    QWidget *widget = new QWidget;
    widget->setLayout(layout);

    setCentralWidget(widget);

    connect( btn1 , SIGNAL( clicked(  ) ) , this , SLOT( setdata( ) ) ) ;
    connect( btn2 , SIGNAL( clicked(  ) ) , this , SLOT( cleardata( ) ) ) ;

}


void MainWindow::setdata(    )
{

    for ( int ii = 0 ; ii < 50 ; ii++ )
    {


        for ( int i = 0 ; i < 500 ; i++ )
        {

           QString str ;

           for ( int j = 0 ; j < 100 ; j++ )
           {

               str = str+ QString::number( j ) ;
           }

            txtEdit->append( str ) ;

        }

    }

}


void MainWindow::cleardata(  )
{

    txtEdit->clear() ;

    //txtEdit->close( ) ;

    //delete  txtEdit ;

}

1 Ответ

0 голосов
/ 31 октября 2019

Это намеренно. QTextEdit - это средство просмотра HTML, с переносом слов, буфером отмены и всеми преимуществами.

Это не QPlainTextEdit, если вы ищете.

Попробуйте: txtEdit->setUndoRedoEnabled(false);,это должно по крайней мере исправить вашу «утечку памяти».
Улучшения производительности могут быть сделаны путем отключения переноса слов.

...