QLineEdit在他的父母面前被摧毁

时间:2014-03-11 13:37:00

标签: c++ qt

我在执行此代码时遇到了一些问题:

void WidgetAggiungi::btnAggiungi_click(){
QDate data=editData->date();

if (radioTelefonata->isChecked()){
    QString numTemp=txtNumero->text();
    ...
}

当我尝试访问txtNumero时,我遇到了分段错误。 txtNumero是一个QLineEdit,作为WidgetAggiungi的私人成员而被删除。 困扰我的是QDateEdit editData工作正常,即使它被删除并以与txtNumero相同的方式创建。

WidgetAggiungi的所有代码都在github上:https://github.com/GiacomoManzoli/qdb/blob/master/widgetaggiungi.h https://github.com/GiacomoManzoli/qdb/blob/master/widgetaggiungi.cpp

3 个答案:

答案 0 :(得分:2)

您在头文件中声明了txtNumero。但是在你做的构造函数中: QLineEdit* txtNumero = new ...所以你没有在标题上初始化txtNumero。这就是为什么它给你带来了段错误。

答案 1 :(得分:0)

在你的构造函数中:

QLineEdit* txtNumero = new QLineEdit();

您正在声明一个局部变量,而不是实例化您的类成员。只需删除开头的类型:

txtNumero = new QLineEdit();

答案 2 :(得分:0)

你有两个问题,其中一个是严重的,另一个是次要的内存泄漏:

首先,您创建了QLineEdit,如下所示:

    QLineEdit* txtNumero= new QLineEdit();

即创建一个名为txtNumero本地变量,而不是将其分配给类成员。你应该写这个:

txtNumero= new QLineEdit();

看来你在一些地方犯了这个错误。您应该对所有这些应用程序应用类似的修复程序。

此外,您应该将父项传递给构造函数,以便它们自动清理。像这样:

txtNumero= new QLineEdit(this);

希望这有帮助!