在我的对象中,我在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 ;
}
答案 0 :(得分:0)
这是故意的。 QTextEdit是一个HTML查看器,具有自动换行,撤消缓冲区和所有优点。
如果您要查找的不是QPlainTextEdit
。
尝试:txtEdit->setUndoRedoEnabled(false);
,至少应该可以解决您的“内存泄漏”。
禁用自动换行可以提高性能。