我正在创建一个简单的桌面应用,其中包含一个窗口和一个基于QStackedWidget
的导航作为中央窗口小部件。
启动后,应用程序会在QStackedWidget
中添加一个小部件,并在用户交互后添加其他小部件。不幸的是,只是尝试从小部件的插槽中访问QStackedWidget
会导致段错误。
MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->centralWidget->addWidget(new LoginPage(this)); // centralWidget = QStackedWidget
}
void MainWindow::onLoginSuccess()
{
qDebug() << ui->centralWidget;
}
LoginPage.cpp广告位
void LoginPage::on_loginButton_clicked()
{
// Check stuff and all
((MainWindow*)parent())->onLoginSuccess();
}
onLoginSuccess()
中的简单调试会导致此错误:
0x760f92a7异常,代码:0xc0000005:读取访问冲突:0x0,flags = 0x0(第一次机会)
我可以毫不费力地从插槽中更新其他UI元素,因此我不知道这里有什么错误。
答案 0 :(得分:2)
在MainWindow::MainWindow
:
ui->centralWidget->addWidget(new LoginPage(this)); // centralWidget = QStackedWidget
addWidget会重新显示您的LoginPage。所以parent()实际上是一个QStackedWidget *,并且on_loginButton_clicked中你的MainWindow *强制转换是错误的。