我使用单个窗口创建简单的桌面应用程序,并基于QStackedWidget
作为中央插件进行导航。从插槽访问中央插件时出现Segfault错误
开始时,应用程序在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()
导致此错误:
Exception at 0x760f92a7, code: 0xc0000005: read access violation at: 0x0, flags=0x0 (first chance)
我有没有T卢布更新槽中的其他UI元素,所以我不知道这里有什么问题。
看来,父()为空,你没有检查。 LoginPage的构造函数是否正确处理父参数? – drescherjm 2014-10-20 17:31:30
此外,我会使用信号/插槽。我的意思是连接on_loginButton_clicked到MainWindow :: onLoginSuccess()而不是直接调用。 – drescherjm 2014-10-20 17:36:52
parent不为null,调用方法不会失败,如果我只是简单地调试一个字符串或其他东西。至于使用信号/插槽,这意味着将大部分逻辑放在'MainWindow'中,这实际上没有意义... – Jukurrpa 2014-10-20 17:42:10