@sddvxd

Почему возникает Access violation?

Здравствуйте!

В своем классе MyForm я наследую QMainWindow и в его конструктор передаю указатель на родительский виджет. Если пытаюсь вызвать MyForm() с аргументом в виде указателя на виджет, мне вылетает Access Violation:

//forms.h

#include "ui_mainwindow.h"
#include "ui_settings.h"

class MainForm : public QMainWindow
{
    Q_OBJECT

private:
    Ui::MainWindow* mainWindow;
public:
    explicit MainForm(QWidget* pobj = 0) : QMainWindow (pobj) {
       mainWindow->setupUi(this);
    }
    Ui::MainWindow* getUiClass(){
        return mainWindow;
    }
};

//main.cpp
    QMainWindow* form = new QMainWindow;
    MainForm f1(form); //Ошибка!


Если я не указываю parent object, то ошибки нет. Подскажите пожалуйста, в чем может быть проблема
  • Вопрос задан
  • 137 просмотров
Решения вопроса 2
myjcom
@myjcom Куратор тега C++
Ui::MainWindow* mainWindow;
mainWindow->setupUi(this);
^^^^^^^
nullptr
Ответ написан
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
У вас mainWindow вообще не где не создаётся, а это UB. Т.е. в конструктор должен выглядеть как-то так:
explicit MainForm(QWidget *parent = nullptr)
    : QMainWindow (parent)
    , mainWindow(new Ui::MainWindow)
{
    mainWindow->setupUi(this);
}


А метода getUiClass() вообще быть не должно, т.к. не следует раскрывать детали реализации.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы