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

问题描述 投票:0回答:1

在我的对象中,我在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 ;

}
qt memory-leaks qtextedit
1个回答
0
投票

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

如果您要查找的不是QPlainTextEdit

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

© www.soinside.com 2019 - 2024. All rights reserved.