Russian Qt Forum

Qt => Вопросы новичков => Тема начата: izhack от Май 29, 2013, 17:07



Название: Нарушение прав доступа при чтении "0x00000188"
Отправлено: izhack от Май 29, 2013, 17:07
Получаю сабж при использовании boxFragment в методе readChapter():
Код:
boxFragment->addItem("1");

Файл domeZ.h
Код:
class domeZ : public QWidget
{
Q_OBJECT
public:
domeZ(QWidget *parent = 0, Qt::WFlags flags = 0);
~domeZ();
        QString GetData(QString path);
QString readChapter();

private:
QComboBox* boxFragment;
};

Файл domeZ.cpp
Код:
domeZ::domeZ(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
QHBoxLayout* Textlayout = new QHBoxLayout;
QHBoxLayout* Hlayout = new QHBoxLayout;
  QVBoxLayout* mainlayout = new QVBoxLayout;
Hlayout->addWidget(boxFragment);
mainlayout->addLayout(Hlayout);

        bibletext = readChapter();
   
setLayout(mainlayout);

QComboBox* boxFragment = new QComboBox;
}

QString domeZ::readChapter()
{
        ...
boxFragment->addItem("1");
        ...
return textChapter;
}


Название: Re: Нарушение прав доступа при чтении "0x00000188"
Отправлено: mutineer от Май 29, 2013, 17:17
1) Hlayout->addWidget(boxFragment); - boxFragment еще не инициализирован и в лейаут ты добавляешь какую-то фигню

2)boxFragment->addItem("1"); boxFragment на этом этапе еще не инициализирован ничем, поэтому чему ты там пытаешься айтем добавить одному рандому известно

3) QComboBox* boxFragment = new QComboBox; - какая-то бессмысленная строчка


Название: Re: Нарушение прав доступа при чтении "0x00000188"
Отправлено: izhack от Май 30, 2013, 09:25
Спасибо за помощь.
Цитировать
3) QComboBox* boxFragment = new QComboBox; - какая-то бессмысленная строчка
Мы ведь создаем конструктор класса QComboBox - это и есть инициализация.
Заменил на 
Код:
boxFragment = new QComboBox;
Код:
domeZ::domeZ(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
Textlayout = new QHBoxLayout;
Hlayout = new QHBoxLayout;
  mainlayout = new QVBoxLayout;

        boxFragment = new QComboBox;

Hlayout->addWidget(boxFragment);

mainlayout->addLayout(Hlayout);

        bibletext = readChapter();
    
setLayout(mainlayout);
}

QString domeZ::readChapter()
{
        ...
boxFragment->addItem("1");
        ...
return textChapter;
}
Надеюсь так правильно?


Название: Re: Нарушение прав доступа при чтении "0x00000188"
Отправлено: mutineer от Май 30, 2013, 10:02
Спасибо за помощь.
Цитировать
3) QComboBox* boxFragment = new QComboBox; - какая-то бессмысленная строчка
Мы ведь создаем конструктор класса QComboBox - это и есть инициализация.

Ты создаешь объект, но указатель на него это локальная переменная и на член класса это влияния не оказывает
Ну вроде бы приведенный код корректен. Работает?


Название: Re: Нарушение прав доступа при чтении "0x00000188"
Отправлено: izhack от Май 30, 2013, 15:37
Да, всё работает.