在窗口之间切换。 Qt Widgets(内存中的1个小部件)

时间:2017-11-05 22:24:44

标签: c++ qt c++14 qtwidgets

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

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

1 个答案:

答案 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, [&reg, &log](){
        reg = new RegWindow("RegWindow");
        reg->show();
        log->deleteLater();
    });
    log->show();
    return a.exec();
}

#include "main.moc"

完整示例可在以下link

中找到