Hola, para lograr lo que necesitas, tenes que crear un form (fuese QMainWindow, QWidget, o QDialog), y dentro de ellos tenes que tener los objetos (de los otros formularios) apuntados. Ej:
//cabecera.h
#include <QtGui> //modulo de widgets de Qt
#define MAX_FORMS 10
class Formulario : public QDialog
{
Q_OBJECT
public:
Formulario (QWidget *parent = 0);
private slots:
void clicked(const QString &texto);
private:
QPushButton *botonera[MAX_FORMS];
QDialog *forms[MAX_FORMS];
QSignalMapper *mapper;
QGridLayout *preparaInterface();
};
//cabecera.cpp
Formulario::Formulario(QWidget *parent) : QDialog(parent)
{
setLayout (preparaInterface());
}
QGridLayout * Formulario::preparaInterface()
{
QGridLayout *retLayout = new QGridLayout;
mapper = new QSignalMapper(this);
for(int bucle = 0; bucle < MAX_FORMS; bucle++)
{
forms[bucle] = new QDialog();
botonera[bucle] = new QPushButton(tr("Mostrar formulario %1").arg(bucle));
connect(botonera[bucle],SIGNAL(clicked()),mapper,SLOT(map()));
mapper->setMapping(botonera[bucle]->text());
retLayout->addWidget(botonera[bucle], bucle / 3, bucle %3);
}
connect(mapper,SIGNAL(mapped(const QString &)),this,SLOT (clicked(const QString &)));
return retLayout;
}
void Formulario::clicked(const QString &texto)
{
//aca tenemos que mostrar los formularios.
//ej:
int index = texto.remove("Mostrar formulario ",true).toInt(); //solo extraigo el numero
forms[index]->show();
}
Fijate, seguramente tenga aulguna fallas el ejemplo anterior, pero eso es porque te estoy respondiendo desde un cyber y no tengo nada para probar. Pero el codigo es valido.