【问题标题】:QLineEdit destroyed before his parentQLineEdit 在他的父母之前被摧毁
【发布时间】:2014-03-11 13:36:59
【问题描述】:

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

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.hhttps://github.com/GiacomoManzoli/qdb/blob/master/widgetaggiungi.cpp

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      在你的构造函数中:

      QLineEdit* txtNumero = new QLineEdit();
      

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

      txtNumero = new QLineEdit();
      

      【讨论】:

        【解决方案3】:

        你有两个问题,一个是严重的,另一个是轻微的内存泄漏:

        首先,您像这样创建了QLineEdit

            QLineEdit* txtNumero= new QLineEdit();
        

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

        txtNumero= new QLineEdit();
        

        您似乎在几个地方犯了这个错误。您应该对所有这些都应用类似的修复。

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

        txtNumero= new QLineEdit(this);
        

        希望这会有所帮助!

        【讨论】:

          猜你喜欢
          • 2017-10-02
          • 2021-02-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-21
          • 2013-04-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多