Hola eferion...había probado varias cosas siempre orientadas a fijar a mano el tamaño del widget y no funcionaba. Al final buscando por donde me has dicho ya me sale.
 
Esta es mi modificación sobre el ejercicio del ejemplo: 
añado un miembro bool a la clase:    
Añado un slot:   
Código C++:
Ver original- public slots: 
-         void OcultarMostrar(); 
En el constructor conecto el botón de mostrar/ocultar al slot que he creado, y no al slot del widget que tiene la extensión. También pongo el tamaño "fixed", que es donde está la clave (gracias de nuevo!!) :    
Código C++:
Ver original- connect(moreButton, SIGNAL(toggled(bool)), this, SLOT(OcultarMostrar())); 
- layout()->setSizeConstraint(QLayout::SetFixedSize ); 
Y finalmente esta es la implementación del slot:    
Código C++:
Ver original- void Extension::OcultarMostrar() 
- { 
-     visible = !visible; 
-   
-     if (visible) 
-     { 
-         //extension->setVisible(visible); 
-         moreButton->setText(tr("Menos")); 
-         extension->show(); 
-     } 
-     else 
-     { 
-         //extension->setVisible(visible); 
-         moreButton->setText(tr("Mas")); 
-         extension->hide(); 
-     } 
- } 
Aquí me entra una duda. La ayuda de qt ya dice que el método 
setExtension(QWidget*) que nombro en el primer post ya está marcado como en desuso. En su lugar recomiendan simplemente hacer uso del método show()/hide().
Sin embargo en el ejemplo hacen uso del método 
setVisible(bool) 
En todo caso, ambas formas funcionan. ¿Sabes si hay alguna razón para usar una u otra? 
Gracias, como siempre!!