Qt的QTextEdit具有较大的内存泄漏问题

时间:2019-10-31 02:55:29

标签: qt memory-leaks qtextedit

在我的对象中,我在QTextEdit小部件中显示日志文件。然后我发现程序消耗了数百MB的内存,即使日志文件的大小很小。清除内容后不会释放内存。

然后,我使用Qt5.12.x在QtCreator中编写一个小演示,只需将QTextEdit小部件放在上面。 调用append函数向其中注入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 :(得分:0)

这是故意的。 QTextEdit是一个HTML查看器,具有自动换行,撤消缓冲区和所有优点。

如果您要查找的不是QPlainTextEdit

尝试:txtEdit->setUndoRedoEnabled(false);,至少应该可以解决您的“内存泄漏”。
禁用自动换行可以提高性能。