Qwidget in QDialog einbinden und *parent QWidget

Verschiedenes zu Qt
Antworten
gary
Beiträge: 7
Registriert: 14. März 2010 18:52

Qwidget in QDialog einbinden und *parent QWidget

Beitrag 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...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Was sagt denn der Gebugger genau? Ist z.B. vZeit initialisiert?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
gary
Beiträge: 7
Registriert: 14. März 2010 18:52

Beitrag 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!
Zuletzt geändert von gary am 22. März 2010 14:56, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn er dort stehen bleibt ist sicher vZeit nicht initiailisiert.
Aber wir sehen zu wenig Code um das definitiv zu sagen...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
gary
Beiträge: 7
Registriert: 14. März 2010 18:52

Beitrag von gary »

beantwortet

Danke Christian
Antworten