LINUX.ORG.RU

простая программа на QT4 и segmentation fault


0

0

Использую SuSE 10 и Qt4, который с нею идет. Примеры собираются без особых проблем и запускаются. Если пытаюсь сделать что-то свое, причем по образу и подобию примера, gcc не ругается, но программа завершается в segmentation fault. Никаких динамических объявлений руцями явно не делал, просто элементарнейший пример. Помогите, куда хоть смотреть?

main.cpp :---------------------

#include <QApplication>
#include "coversform.h"

int main(int argc, char* argv[]){
QApplication app(argc, argv);
coversForm mainWin;
mainWin.show();
return app.exec();
}

coversform.h:-------------------
#ifndef COVERSFORM_H
#define COVERSFORM_H

#include "ui_coversform.h"

class coversForm : public QWidget
{
Q_OBJECT

public:
coversForm(QWidget *parent = 0);

private:
Ui::coversForm ui;
};
#endif

coversform.cpp:--------------------
#include <QtGui>
#include "coversform.h"

coversForm::coversForm(QWidget *parent)
: QWidget(parent)
{
ui.setupUi((QMainWindow*)this);
}

Ессесно падать будет, ибо ты хочешь сделать QMainWindow из QWidget, нельзя так делать:)

anonymous
()
Ответ на: комментарий от anonymous

1.Если я этого не делаю, то gcc пишет: coversform.cpp: In constructor &#8216;coversForm::coversForm(QWidget*)&#8217;: coversform.cpp:31: error: no matching function for call to &#8216;Ui::coversForm::setupUi(coversForm* const)&#8217; ui_coversform.h:34: note: candidates are: void Ui_coversForm::setupUi(QMainWindow*) make: *** [coversform.o] Ошибка 1 Знаю, что это неправильно, но выкрутился так, подскажите тогда, чего он от меня хочет? 2.Беру пример calculatorform, меняю в нем аналогичную строку та соответственный хак как в моем горе-проге: #include <QtGui>

#include "calculatorform.h"

CalculatorForm::CalculatorForm(QWidget *parent) : QWidget(parent) { ui.setupUi((QMainWindow*)this); }

void CalculatorForm::on_inputSpinBox1_valueChanged(int value) { ui.outputWidget->setText(QString::number(value + ui.inputSpinBox2->value())); }

void CalculatorForm::on_inputSpinBox2_valueChanged(int value) { ui.outputWidget->setText(QString::number(value + ui.inputSpinBox1->value())); }

И ВСЕ РАБОТАЕТ!!! Так значит, можно так делать или что?

ensoreus
() автор топика
Ответ на: комментарий от ensoreus

Бери книжку по c++ и иди читать!!!! ТАК ДЕЛАТЬ НЕЛЬЗЯ!!!!!!!!! Ты на структуру меньшего размера накладываешь структуру бОльшего размера, в результате чего происходит обращение фиг знает куда, откуд и сегфолт.

anonymous
()

Пиши лучше так

#ifndef COVERSFORM_H
#define COVERSFORM_H

#include "ui_coversform.h"

class coversForm : public QWidget, private Ui::coversForm
{
Q_OBJECT
...

coversform.cpp:--------------------
#include <QtGui>
#include "coversform.h"

coversForm::coversForm(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
}

LestorN
()
Ответ на: комментарий от LestorN

и как это ему поможет? ui.setupUi(); ведь хочет QMainWindow, так что наследоваться надо от QMainWidget, а не от QWidget! То есть:

class coversForm : public QMainWindow, private Ui::coversForm

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.