在Qt中单击按钮上的销毁和重建对象

时间:2015-12-22 16:07:36

标签: qt object destroy rebuild

这是我需要在我的项目中使用它的基本示例。

我需要有人帮助在按钮点击时销毁和重建对象。我的意思是:

//mainwindow.cpp  

{//constructor 
    ui->setupUi(this);  
    /*private*/frame = new QFrame(ui->centralWidget);  
    /*private*/temp = new QPushButton(frame);  
    QPushButton ok = new QPushButton(ui->centralWidget);  
    ok->setGeometry(100,100,50,50);  
    connect(ok, SIGNAL(clicked()), SLOT(des()));  
}

{//slot des()  
    temp->~QPuhsButton();  
    temp = new QPushButton(frame);  
}

请参阅,我需要的是temp 销毁重建

temp = new QPushButton(frame);行无效,因为无论有没有,temp都会从布局中消失,这意味着temp->~QPuhsButton(); 正在运作。

现在,这困扰我的原因是因为这个有效:

{//constructor 
    ui->setupUi(this);  
    frame = new QFrame(ui->centralWidget);  
    temp = new QPushButton(frame); 
    temp->~QPuhsButton();  
    temp = new QPushButton(frame);  
    /*QPushButton ok = new QPushButton(ui->centralWidget);  
    ok->setGeometry(100,100,50,50);  
    connect(ok, SIGNAL(clicked()), SLOT(des()));*/
}

我尝试了最后一段代码,看看是否有可能按照点击按钮的方式销毁和重建对象。事实证明,这次temp = new QPushButton(frame); 正在工作,按钮就在那里。

编辑: 感谢答案和评论,但我很抱歉,因为在提问之前我没有意识到什么。

按钮 被删除/销毁,当我写{{1}时,它们只是在框架内“重新绘制”再次,实际上他们仍然不是。关于这个新问题的帮助,再次抱歉。

2 个答案:

答案 0 :(得分:1)

您可以使用delete来销毁对象。 destroy方法只能由对象本身调用。和qwidgets可以由应用程序自动回收。使用指针指向新的内存空间。

答案 1 :(得分:1)

除非您使用内存池和新位置,否则不要手动调用析构函数。

在Qt中,最好使用delateLater()以避免未处理事件的错误。此外,默认情况下,窗口小部件是隐藏的,因此您需要show()窗口小部件。

所以你的代码应该是:

{//slot des()  
    if (temp) temp->deleteLater();
    temp = new QPushButton(frame);  
    temp->show();
}