Qlineedit在他的父母面前摧毁了

QLineEdit destroyed before his parent

本文关键字:摧毁 父母 Qlineedit      更新时间:2023-10-16

我在执行此代码时遇到了一些麻烦:

void WidgetAggiungi::btnAggiungi_click(){
QDate data=editData->date();
if (radioTelefonata->isChecked()){
    QString numTemp=txtNumero->text();
    ...
}

当我尝试访问txtnumero时,我会出现一个细分故障。txtnumero是一个被宣布为widgetaggiungi的私人成员的Qlineedit。令我困扰的是,即使QDateEdit Editdata的效果正常,即使以相同的方式宣布并创建了它。

您在标题文件上声明了txtNumero。但是在构造函数中,您做到了: QLineEdit* txtNumero = new ...因此,您不会在标题上初始化txtnumero。这就是为什么它给了您segfault ..

在您的构造函数中:

QLineEdit* txtNumero = new QLineEdit();

您正在宣布本地变量,而不是安排您的班级成员。只需在开始时删除类型:

txtNumero = new QLineEdit();

您有两个问题,其中一个是严重的,另一个是一个较小的内存泄漏:

首先,您像这样创建了QLineEdit

    QLineEdit* txtNumero= new QLineEdit();

正在创建 local 变量名为 txtNumero,而不是将其分配给类成员。您应该写这篇文章:

txtNumero= new QLineEdit();

看来您在几个地方犯了这个错误。您应该将类似的解决方案应用于所有修复。

另外,您也应该将父母传递给构造函数,以便它们会自动清理。这样:

txtNumero= new QLineEdit(this);

希望这会有所帮助!