我正在创建一个简单的桌面应用程序,它有一个窗口和一个基于 QStackedWidget
的导航作为中心小部件。
启动时,应用程序在 QStackedWidget
中添加一个小部件,其他小部件在用户交互后添加。不幸的是,仅仅尝试从小部件的插槽访问 QStackedWidget
会导致段错误。
主窗口.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()
中的简单调试导致此错误:
Exception at 0x760f92a7, code: 0xc0000005: read access violation at: 0x0, flags=0x0 (first chance)
我从插槽更新其他 UI 元素没有问题,所以我不知道这里出了什么问题。
最佳答案
在 MainWindow::MainWindow
中:
ui->centralWidget->addWidget(new LoginPage(this)); // centralWidget = QStackedWidget
addWidget将重新设置您的登录页面。所以 parent() 实际上是一个 QStackedWidget* 并且您的 MainWindow* 转换在 on_loginButton_clicked 中是错误的。
关于c++ - 从插槽访问中央小部件时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26470775/