这是我需要在我的项目中使用它的基本示例。
我需要有人帮助在按钮点击时销毁和重建对象。我的意思是:
//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}时,它们只是不在框架内“重新绘制”再次,实际上他们仍然不是。关于这个新问题的帮助,再次抱歉。
答案 0 :(得分:1)
您可以使用delete来销毁对象。 destroy方法只能由对象本身调用。和qwidgets可以由应用程序自动回收。使用指针指向新的内存空间。
答案 1 :(得分:1)
除非您使用内存池和新位置,否则不要手动调用析构函数。
在Qt中,最好使用delateLater()
以避免未处理事件的错误。此外,默认情况下,窗口小部件是隐藏的,因此您需要show()
窗口小部件。
所以你的代码应该是:
{//slot des()
if (temp) temp->deleteLater();
temp = new QPushButton(frame);
temp->show();
}