c++ - 从插槽访问中央小部件时出现段错误

标签 c++ qt access-violation

我正在创建一个简单的桌面应用程序,它有一个窗口和一个基于 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/

相关文章:

c++ - 如何将 MPI 与 QT 一起使用?

c++ - 如何在 QLineEdit 中使用 std::string?

c - C 中的动态矩阵重新分配 - 在访问冲突读取位置 (msvcr120d.dll) 出现错误未处理的异常

c++ - 使用 Clang++ 编译会忽略 CMAKE_INCLUDE_PATH

c++ - 在 Qt 自定义对象中使默认构造函数私有(private)

c++ - 更改预处理到文件后出现错误 1 ​​错误 LNK1104

c++ - 有人可以解释我如何访问这个数组吗? (图像处理程序)

java.lang 在 JNI 中调用 BluetoothAdapter.getDefaultAdapter() 时抛出 UNsatisfiedLinkError

c++ - 为访问冲突定义条件断点

c++ - "0xC0000005: Access violation"使用 fstream 时