gpt4 book ai didi

c++ - 如何从自定义小部件类更改中央小部件?

转载 作者:行者123 更新时间:2023-11-28 06:52:55 24 4
gpt4 key购买 nike

我从 Qt 开始。之前我使用 Java Swing,通过 Card Layout 实现了这一点。我有 MainWindow、Login Widget 和 Dashboard Widget。

主窗口.cpp

MainWindow::MainWindow(QWidget *parent) : 
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

// set login screen on startup
QWidget *login = new Login(this);
setCentralWidget(login);
}

登录.cpp

#include "login.h"
#include "ui_login.h"

Login::Login(QWidget *parent) :
QWidget(parent),
ui(new Ui::Login)
{
ui->setupUi(this);
}

Login::~Login()
{
delete ui;
}

void Login::on_loginButton_clicked()
{
// some logic
// here I want to create Dashboard widget in central widget
// but method setCentralWidget() can't be called from here
}

最佳答案

您想使用信号和槽在窗口之间进行通信。 QDialog 特别提供了三个重要的信号:accepted()、rejected()、finished(int)。所以你会想做这样的事情:

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

// set login screen on startup
QWidget *login = new Login(this);
connect(login, SIGNAL(finished(int)), this, SLOT(loginFinished(int)));

setCentralWidget(login);
}

MainWindow::loginFinished(int reason)
{
Login *login = qobject_cast<Login*>(sender());
if (!login) {
qDebug() << "something bad happened!";
return;
}

login->deleteLater();
setCentralWidget(someOtherWidget);
}

关于c++ - 如何从自定义小部件类更改中央小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23582437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com