C++ 如何从自定义小部件类更改中心小部件?
我从Qt开始。之前我使用JavaSwing,通过卡片布局实现了这一点。我有主窗口、登录小部件和仪表板小部件 main window.cppC++ 如何从自定义小部件类更改中心小部件?,c++,qt,C++,Qt,我从Qt开始。之前我使用JavaSwing,通过卡片布局实现了这一点。我有主窗口、登录小部件和仪表板小部件 main window.cpp MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // set login screen on startup QWidget *login
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);
}
#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
}
Login.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);
}
#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);
}
MainWindow::MainWindow(QWidget*父项)
:QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
//启动时设置登录屏幕
QWidget*登录=新登录(此);
连接(登录,信号(完成(int)),此,插槽(登录完成(int));
setCentralWidget(登录);
}
MainWindow::loginFinished(内部原因)
{
Login*Login=qobject_cast(sender());
如果(!登录){
qDebug()deleteLater();
setCentralWidget(someOtherWidget);
}