例如,我有2个小部件,我按下第一个小部件上的按钮。我需要删除第一个小部件并创建新的小部件。
这怎么可能?我的意思是一些结构。我使用stackedwidgets
,但来自stackedwidgets
的页面位于内存中。我需要避免这种情况。
void Window::on_registrationButton_clicked(){
ui->logWindow->hide();
ui->RegistrWindow->show();
}
答案 0 :(得分:0)
由于你要消除对象所不能在对象所属的同一个类中进行,你必须在它之外进行,例如在下面的代码中我创建了一个在按钮时触发的信号按下,我将它连接到lambda函数,在该函数中创建新对象并消除发出它的对象。
class LogWindow: public QWidget{
Q_OBJECT
public:
LogWindow(const QString &text, QWidget *parent=Q_NULLPTR):QWidget(parent){
setLayout(new QVBoxLayout);
btn = new QPushButton(text, this);
layout()->addWidget(btn);
connect(btn, &QPushButton::clicked, this, &LogWindow::customSignal);
}
signals:
void customSignal();
private:
QPushButton *btn;
};
class RegWindow : public QWidget{
[...]
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
LogWindow *log= new LogWindow("LogWindow");
RegWindow *reg;
QObject::connect(log, &LogWindow::customSignal, [®, &log](){
reg = new RegWindow("RegWindow");
reg->show();
log->deleteLater();
});
log->show();
return a.exec();
}
#include "main.moc"
完整示例可在以下link
中找到