我很好奇是否有人知道通过将其重置为零来删除QValidator
是否会泄漏内存。 QT Documentation提到验证器已被删除",但这是否也意味着它已被删除?
我的意思的一个例子......
QLineEdit edit;
edit.setValidator(new QIntValidator(0,100));
// .... use the line edit
edit.setValidator(0);
答案 0 :(得分:3)
不,0
不会删除validator
,只会从validator
删除lineEdit
。如果您仍想使用
edit.setValidator(new QIntValidator(0,100));
然后您可以删除它:
ui->lineEdit->setValidator(new Validator);
QValidator *vaal = const_cast<QValidator *>(ui->lineEdit->validator());//validator returns const, we use const_cast to avoid problems
vaal->deleteLater();
或
(const_cast<QValidator *>(ui->lineEdit->validator()))->deleteLater();
//here we just does not create unnecessary QValidator *vaal
其中Validator
是一个子类:
Validator::~Validator()
{
qDebug() <<"~Validator";
}
输出是:
~Validator
或者只使用:
Validator *vaal = new Validator;
ui->lineEdit->setValidator(vaal);
ui->lineEdit->setValidator(0);
vaal->deleteLater();
输出相同。
此外,当您使用setValidator
QLineEdit
时,不会拥有此validator
的所有权。见下一个代码:
ui->lineEdit->setValidator(new QIntValidator(0,100,this));
qDebug() << ui->lineEdit->validator()->parent();
我的情况输出:MainWindow(0x28fdc8, name = "MainWindow")
正如您所看到的那样,它不是lineEdit
!
ui->lineEdit->setValidator(new QIntValidator(0,100));
qDebug() << ui->lineEdit->validator()->parent();
输出为:QObject(0x0)
删除validator
只是您的责任。
答案 1 :(得分:0)
只需设置验证器的父级,e。 G:
QLineEdit edit;
edit.setValidator(new QIntValidator(0,100,&edit));
在这种情况下,QLineEdit的析构函数将删除验证器。