在 windows 之间切换。 Qt Widgets(内存中有 1 个小部件)

Switching between windows. Qt Widgets ( 1 widget in memory )

例如,我有 2 个小部件,我在第一个小部件上按下按钮。我需要删除第一个小部件并创建新的小部件。 这怎么可能?我的意思是一些结构。我使用 stackedwidgets,但来自 stackedwidgets 的页面位于内存中。我需要避免这种情况。

void Window::on_registrationButton_clicked(){
    ui->logWindow->hide();
    ui->RegistrWindow->show();
}

当你要消除对象时,你不能在对象所属的同一个 class 内进行,你必须在它之外进行,例如在下面的代码中我创建了一个信号按下按钮时触发,我已将它连接到 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, [&reg, &log](){
        reg = new RegWindow("RegWindow");
        reg->show();
        log->deleteLater();
    });
    log->show();
    return a.exec();
}

#include "main.moc"

完整的例子可以在下面找到link