Qwidget in QDialog einbinden und *parent QWidget
Verfasst: 22. März 2010 14:10
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...
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...