Bonsoir,

Je rencontre quelques soucis avec la classe QMdiArea.
Premièrement je ne parviens pas à définir la sous fenêtre qui doit s'afficher au lancement du programme.
Ensuite la barre de défilement verticale est en grève.

Pour l'histoire de l'activation d'une sous fenêtre, voici le code de ma fenêtre principale :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
FenetrePrincipale::FenetrePrincipale(QWidget *parent)
	: QMainWindow(parent)
{
	centralWidget = new QMdiArea();
		centralWidget->setViewMode(QMdiArea::TabbedView);
		centralWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
		centralWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
 
	FenetreListeDemandes* fenetreListeDemandes = new FenetreListeDemandes(this);
	fenetreListeDemandeSW = centralWidget->addSubWindow(fenetreListeDemandes);
		fenetreListeDemandeSW->setWindowTitle(tr("Liste des fiches"));	
	FenetreDemande* fenetreDemande = new FenetreDemande();
	fenetreDemandeSW = centralWidget->addSubWindow(fenetreDemande);
		fenetreDemandeSW->setWindowTitle(tr("Fiche"));
 
	setCentralWidget(centralWidget);
	centralWidget->setActiveSubWindow(fenetreListeDemandeSW);
 
	connect(fenetreDemande, SIGNAL(demandeAjoutee()), fenetreListeDemandes, SLOT(majListeDemandes()));
}
 
void FenetrePrincipale::ouvrirDemande(const Demande demande)
{
	FenetreDemande* fenetreDemande = (FenetreDemande*)(fenetreDemandeSW->widget());
 
	if (demande.isEmpty())
	{
		fenetreDemande->nouvelleDemande();
	}
	else
	{
		fenetreDemande->chargerDemande(demande);
	}
 
	centralWidget->setActiveSubWindow(fenetreDemandeSW);
}
A la ligne 23 j'essaye de spécifier que c'est la sous fenêtre "fenetreListeDemandeSW" qui doit être active, mais c'est l'autre qui est affichée et le focus est donné au premier champ du formulaire de cette dernière.
Par contre, mon slot "ouvrirDemande(const Demande)" fonctionne très bien et l'appel à "setActiveSubWindow" change bien l'onglet actif...

Je me demande donc si je n'utilise pas mal la classe QMdiArea.
Les deux classes que j'utilise pour mes sous fenêtres sont dérivées de QWidget.
Dans le cas de "FenetreListeDemandes" le constructeur prends deux paramètres, le premier (fournis dans l'exemple) est juste utilisé pour permettre à cette fenêtre d'appeler le slot "ouvrirDemande" de ma classe "FenetrePrincipale". Il n'est en aucun cas utilisé pour définir le widget parent de la fenêtre.


Pour le deuxième problème concernant la barre de défilement verticale.
Actuellement c'est la fenetre "FenetreDemande" qui est affichée en première. Lors du premier affichage la barre de défilement est grisée, pourtant je ne vois pas le bas de la fenêtre.
Si je change d'onglet pour revenir ensuite à la fenêtre des demandes la barre verticale est apparue et je peux faire défiler ma fenêtre.
Deux choses :
Premièrement, je suis obligé de forcer l'affichage de la barre verticale (ligne 13).
Deuxièmement, une fois que je fait défiler ma page je me rends compte qu'elle défile "trop" et qu'une bande gris foncé apparaît tout en bas.

Ce dernier point et secondaire, je le précise surtout si cela peut rappeler des souvenirs à quelqu'un.

Merci de votre aide.