No to ja robię to tak. Klasa MOJEGO obiektu (dwa radiobutton + label)
plik nagłówkowy:
#include <QGridLayout>
#include <QRadioButton>
#include <QGroupBox>
#include <QHBoxLayout>
#include <QWidget>
#include <QSizePolicy>
class obiektnowegozlec : public QWidget
{
Q_OBJECT
public:
QRadioButton *tak , *nie;
QLabel *trescpytan;
QGroupBox *grupa;
QHBoxLayout *Hbox;
QString tresc_pyt;
obiektnowegozlec(QString tresc_pyt, QWidget *parent=0);
void tworzenie();
signals:
public slots:
};
#endif // OBIEKTNOWEGOZLEC_H
plik źródłowy.
#include "obiektnowegozlec.h"
#include "oknogl.h"
obiektnowegozlec::obiektnowegozlec(QString tresc_pyt, QWidget *parent) : QWidget(parent), tresc_pyt(tresc_pyt)
{
tworzenie();
}
void obiektnowegozlec::tworzenie()
{
tak = new QRadioButton("TAK" , this);
nie = new QRadioButton("NIE" , this);
trescpytan = new QLabel(tresc_pyt , this);
trescpytan->setWordWrap(true);
trescpytan->setFixedSize(150,50);
tak->setChecked(true);
grupa = new QGroupBox(this);
Hbox = new QHBoxLayout;
Hbox->addWidget(trescpytan);
Hbox->addWidget(tak);
Hbox->addWidget(nie);
grupa->setLayout(Hbox);
}
I teraz stworzenie kilkunastu obiektów w klasie NoweZlecenie dziedziczącej po QDialog. Stworzenie odbywa się w funkcji, zamieszczam tutaj tylko jej ciało. W Ciele, ustalam, jaka ma być ilość obiektów. Tworzone są jako wskaźnik na tablice wskaźników. O il ilości decyduje zmienna w innej klasie. W zależności od tego czy zmienna 'of' ma wartość 1 czy inną uruchamiam odpowiednie własne makro.
void NoweZlecenie::dodanieobiektow()
{
if(of==1)
{
wsk->obsql->Oper_FORMULARZ(sql::ZCZYTANIE_PYTAN_PODS);
obiekt = new obiektnowegozlec*[wsk->obsql->zmiennatablform];
int i;
for(i = 0 ; i<wsk->obsql->zmiennatablform ; i++)
{
obiekt[i] = new obiektnowegozlec(wsk->obsql->trescpytsql[i] ,this);
}
}
else
{
wsk->obsql->Oper_FORMULARZ(sql::ZCZYTANIE_PYTAN_ROZSZ);
obiekt = new obiektnowegozlec*[wsk->obsql->zmiennatablform];
int i;
for(i = 0 ; i<wsk->obsql->zmiennatablform ; i++)
{
obiekt[i] = new obiektnowegozlec(wsk->obsql->trescpytsql[i], this);
}
}
No i tutaj wreszcie funkcja dająca wszystko do QGridLayout. Funkcja działa w zależności od warunku tworzy kolumny obiektów w tym wypadku po 5. Można to oczywiście zmienić. Jak widać ilość obiektów jest ograniczona. Proszę przyjrzyj się.
void NoweZlecenie::gridlaj()
{
lajout = new QGridLayout(this);
int i;
for(i=0 ; i<wsk->obsql->zmiennatablform ; i++)
{
if(i<=5)
{
lajout->addWidget(obiekt[i], i , 0);
}
else if(i<=11)
{
lajout->addWidget(obiekt[i], i-6 , 1);
}
else if(i<=17)
{
lajout->addWidget(obiekt[i], i-12 , 2);
}
else if(i<=23)
{
lajout->addWidget(obiekt[i], i-18 , 3);
}
}
lajout->addWidget(boxp,11,0); // boxp to QGroupbox + QHboxLayout są to dwa przyciski anul i zapisz to właśnie one się nie "chowały"
this ->setLayout(lajout);
}