Seite 1 von 1

Qwidget in QDialog einbinden und *parent QWidget

Verfasst: 22. März 2010 14:10
von gary
Hallo,

ich habe moeglicherweise etwas Grundsaetzliches nicht verstanden. Ich habe ein Widget geschrieben, welches beim Aufruf in Main()... einwandfrei funktioniert.

KZeit.h:
#include <QLayout>
#include <QObject>
#include <QString>

class KZeit : public QWidget {
Q_OBJECT
private:
QGridLayout *layout;
QLabel *text;
QSlider *balken;
QLCDNumber *stunden;
QLCDNumber *minuten;

public:
KZeit(QString t,int min,int minimum,int maximum);
int getValue();

public slots:
void fresh(int min);
};
#endif // KZEIT_H

KZeit.cpp:
#include "KZeit.h"

KZeit::KZeit(QString t,int min,int minimum,int maximum) {
layout = new QGridLayout(this);
text = new QLabel(t,this);
balken = new QSlider(this);
stunden = new QLCDNumber(2,this);
minuten = new QLCDNumber(2,this);

balken->setOrientation(Qt::Horizontal);
balken->setMinimum(minimum);
balken->setMaximum(maximum);

stunden->display(min/60);
minuten->display(min%60);

layout->addWidget(text,0,0);
layout->addWidget(balken,0,1);
layout->addWidget(stunden,0,2);
layout->addWidget(minuten,0,3);

QObject::connect(balken,SIGNAL(sliderMoved(int)),this,SLOT(fresh(int)));
}
void KZeit::fresh(int min) {
stunden->display(min/60);
minuten->display(min%60);
}
int KZeit::getValue() {
int m,h;
m = minuten->intValue();
h = stunden->intValue();
return (60*h + m);
}


Wenn ich nun ein QDialog erzeuge, und dort ein paar Instanzen KZeit einsetzen moechte, beendet sich das Programm instantan, soll heissen 'segmentation fault'

lesen = new KZeit(QString("Lesen"),100,0,360);
schlafen = new KZeit(QString("Schlafen"),100,0,360);
vZeit->addWidget(schlafen,1,0);
vZeit->addWidget(essen,2,0);

Zeit ist ein QGridLayout. Der Debugger bringt mich auf die Idee, dass der Fehler im addWidget steckt.
Ausserdem stellt sich noch das Problem, dass ich ja das parent-QWidget definieren moechte. Funktioniert dies mittels:
KZeit::KZeit(QString t,int min,int minimum,int maximum,QWidget *parent) : QWidget(parent=0)...
?

Danke schonmal...

Verfasst: 22. März 2010 14:44
von Christian81
Was sagt denn der Gebugger genau? Ist z.B. vZeit initialisiert?

Verfasst: 22. März 2010 14:50
von gary
vZeit ist initialisiert. Wenn ich den Debugger laufen lasse, beendet dieser irgendwann. Der Cursor befindet sich dann im Quelltext bei den addWidget befehlen.

Habe den Fehler entdeckt. Lag wahrscheinlich an meiner Unerfahrenheit. Habe sehr lange daran gearbeitet, bevor ich's in's Forum geschrieben habe. Es gab ein KZeit element, was nicht ordentlich initialisiert wurde.

Danke fuer die Muehe!

Verfasst: 22. März 2010 14:52
von Christian81
Wenn er dort stehen bleibt ist sicher vZeit nicht initiailisiert.
Aber wir sehen zu wenig Code um das definitiv zu sagen...

Verfasst: 22. März 2010 14:59
von gary
beantwortet

Danke Christian