A la demande générale de Mr Mislin, voici des astuces pour obtenir un peu de dynamisme avec les templates statiques (c'est à en perdre son latin).

Voici un exemple que j'ai essayé de simplifier au maximum (hésites pas a poser des question plus bas, dans les commentaires) :

formAdresse.php
<?php
 
require_once 'HTML/QuickForm.php';
class FormAdresse extends HTML_QuickForm {
 
	private $A_elementAparser = array();
	
	public function __construct() {
		parent::HTML_QuickForm('formAdresse', 'post', $_SERVER['PHP_SELF'], '', null, true);
		
		$this->addElement('header', 'titre', 'Adresses');
		
		// --- on va construire 4 groupe d'adresses
		// perso1, perso2, buro1, buro2 (par exemple)
		for ($I_i = 0 ; $I_i < 4 ; $I_i++) {
			$A_group	= array();
			$A_group[]	= $this->createElement('text', 'numero', 'Numero');
			$A_group[]	= $this->createElement('text', 'rue', 'Rue');
			$A_group[]	= $this->createElement('text', 'codePost', 'Code Postal');
			$A_group[]	= $this->createElement('text', 'ville', 'Ville');
			
			// --- on ajoute ceci dans les element a parser
			$this->A_elementAparser[] = $this->addGroup(
				$A_group, 'adresse_'.$I_i, 'addresse '.$I_i, '<br/>', true);
			
		}
		
	
	}
	
	public function toHtml() {
		
		// --- load le template
		require_once 'HTML/Template/Sigma.php';
		$O_tpl =& new HTML_Template_Sigma('.');
		$O_tpl->loadTemplateFile('formAdresse.tpl');
		
		// --- renderer
		require_once 'HTML/QuickForm/Renderer/ITStatic.php';
		$O_rdr =& new HTML_QuickForm_Renderer_ITStatic($O_tpl);
		$this->accept($O_rdr);
		
		// -- pour chaque element a parser
		foreach ($this->A_elementAparser as $O_element) {
			$O_tpl->setCurrentBlock('Adresse');
                        // on va dire que la variable du template "contenu", prendra la valeur 
                        // du label de l'element + le code html correspondant
			$A_var{'contenu'}	= $O_element->getLabel()."<br/>".$O_element->toHtml()."";
			$O_tpl->setVariable($A_var);
			$O_tpl->parseCurrentBlock('Adresse');
			
		}
		
		
		return $O_tpl->get();
	
	}
}
 
 
$O_form	= new FormAdresse();
 
echo $O_form->toHtml();
?>
formAdresse.tpl
<!-- BEGIN debut -->
<form {formAdresse_attributes}>
	<input name="_qf__formAdresse" type="hidden" value="" />
	<h2>{formAdresse_header_titre}</h2>
	<!-- END debut -->
	<!-- BENGIN Adresses --->
	<p>{contenu}</p>
	<!-- END Adresses -->
<!-- BEGIN fin -->
</form>
<!-- END fin -->

Ce qui donne ceci :

Extrapolation

De la, on peut imaginer un "truc" qui irrait "lire" l'intérieur d'un groupe afin de récupérer les labels et les html de chaque membre du groupe...