단일 창과 QStackedWidget
기반 탐색이 중앙 위젯으로 사용되는 간단한 데스크톱 응용 프로그램을 만듭니다.슬롯에서 중앙 위젯에 액세스 할 때 Segfault
시작시 응용 프로그램이 QStackedWidget
에 위젯을 추가하고 사용자 상호 작용 후에 다른 위젯이 추가됩니다. 불행히도 단순히 위젯의 슬롯에서 QStackedWidget
에 액세스하려고하면 segfault가 발생합니다.
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 요소를 슬롯에서 업데이트하기 때문에 여기에 무슨 문제가 있는지 알 수 없습니다. MainWindow::MainWindow
에서
parent()가 null이며 사용자가 확인하지 않는 것 같습니다. LoginPage의 생성자가 부모 매개 변수를 올바르게 처리합니까? – drescherjm
또한이 신호/슬롯을 사용합니다. 나는 직접 호출 대신에 on_loginButton_clicked를 MainWindow :: onLoginSuccess()에 연결하는 것을 의미한다. – drescherjm
부모가 null이 아니므로 단순히 문자열이나 다른 것을 디버깅하는 경우 메서드 호출이 실패하지 않습니다. signal/slot을 사용하는 것에 관해서는, 이것은 대부분의 로직을 실제로 이해하지 못하는'MainWindow'에 넣는 것을 의미합니다 ... – Jukurrpa