I have done something similar with several QQueue containers full of QLabel and QLineEdit items. Just append and remove items when the user desires more or less. Could combine that with a QGridLayout and put things where you need. Not sure if that's the best way, but works well for me.
http://doc.trolltech.com/4.4/qqueue.html
QQueue<QLineEdit *> linedit;
QGridLayout *gridboxLayout;
gridboxLayout= new QGridLayout();
linedit.enqueue(new QLineEdit ());
gridboxLayout->addWidget(linedit.last(),row,column);
this->setLayout(gridboxLayout);
You are gonna need to add stuff for keeping track of rows, columns and items and such but that is the basic setup. Just keep appending new items to the QQueue and insert into a new row of the gridLayout. You can even reference them by row and delete them later.
The other easy way to do this, which will work with the designer, if you have a reasonable max number of items, is to just build the whole thing and hide the widgets you don't want to see until you need them.