У меня есть рабочая версия,< /p>
Код: Выделить всё
#include
#include
#include
#include
#include
#include
#include "main.h"
#include "moc_main.cpp" // Ensure the moc file is included
DialogB::DialogB(QWidget *parent) : QDialog(parent)
{
setWindowTitle("Dialog B");
setLayout(new QVBoxLayout());
QPushButton *closeButton = new QPushButton("Close", this);
layout()->addWidget(closeButton);
setWindowModality(Qt::ApplicationModal);
connect(closeButton, &QPushButton::clicked, this, &DialogB::close_dialog);
}
void DialogB::close_dialog()
{
std::cout show();
dialogB->show();
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QDialog *mainwindow = new QDialog();
mainwindow->setWindowTitle("Main Window");
mainwindow->show();
ABParent *abparent = new ABParent(mainwindow);
abparent->show();
int result = app.exec();
delete mainwindow;
delete abparent;
return result;
}
Код: Выделить всё
#pragma once
#include
class DialogB;
class ABParent : public QDialog {
Q_OBJECT
public:
QDialog *dialogA;
DialogB *dialogB;
ABParent(QWidget *parent = nullptr);
};
class DialogB : public QDialog {
Q_OBJECT
public:
DialogB(QWidget *parent = nullptr);
public slots:
void close_dialog();
};
Код: Выделить всё
cmake_minimum_required(VERSION 3.30)
project(QtBug)
set(CMAKE_AUTOMOC ON)
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
qt_add_executable(QtBug main.cpp)
target_include_directories(QtBug PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include)
target_link_libraries(QtBug PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets)
Код: Выделить всё
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QDialog mainwindow;
mainwindow.setWindowTitle("Main Window");
mainwindow.show();
ABParent abparent = new ABParent(&mainwindow);
abparent.show();
return app.exec();
}
Следовательно, поскольку куча и стек используют разные методы хранения объектов в памяти и поскольку мы не выходим из main для очистки стека, почему создание объектов здесь может вызвать аппаратный сбой?
Подробнее здесь: https://stackoverflow.com/questions/790 ... pplication