Forum QtFR

La communauté francophone Qt

Vous n'êtes pas identifié(e).

Annonce

Qt 4: 4.8.4 - Qt 5: 5.0.2 - Qt Creator: 2.7.1 - Qt Installer: 1.3.0 - VS Qt 4: 1.1.11 - VS Qt 5: 1.2.1 - Monkey Studio: 1.9.0.4

#1 18-06-2012 22:55:07

Ero-sennin95
Membre(e) Qt
Inscription : 21-03-2010
Messages : 16

affichage par page dans qtableview

Bonjour,
J'utilise dans mon appli un Qsqltablemodel et un qtableview et j aimerai que lorsqu'il y a trop de résultat
Naviguer par "page".avez vous une idée de comment procéder?
Merci

Hors ligne

#2 21-06-2012 20:04:57

obiwankennedy
Membre(e) Qt
Inscription : 17-01-2008
Messages : 179

Re : affichage par page dans qtableview

j'ai fait un truc assez proche avec un model en list. C'est assez facile en faite. Dans ton interface tu ajoutes 2 boutons «page suivante» et «page precedente». Ces deux boutons appellent du code dans ton modele.
Dans ton model, tu définies 3 méthodes nouvelles :
-PageNext
-PagePrevious
-getPageCount

en gros, ces fonctions joue avec une variable qui represente la page courante, et le nombre d'élément total / nombre d'élément à afficher.

Tu modifies tes méthodes index et getRowCount.
dans index(), tu déplaces ton index de currentPage*nombreElementParPage et tu récupères ta donnée.
pour le getRowCount tu retournes le nombre d'élément de ta page. En gros tu retournes toujours le nombre max d'élément que tu veux afficher par page sauf la dernier qui a un nombre variable.

Tu émets le signal reset dans les fonctions
-PageNext
-PagePrevious
-getPageCount

pour que la vue se mette à jour,

Tu peux faire le meme traitement dans un proxy model c'est surement plus propre.

Dernière modification par obiwankennedy (21-06-2012 20:08:03)

Hors ligne

#3 22-06-2012 10:25:25

Ero-sennin95
Membre(e) Qt
Inscription : 21-03-2010
Messages : 16

Re : affichage par page dans qtableview

salut et merci a toi de ta réponse,
Donc en fait il faut que j'herite de mon QSQLmodel et que je ré-implante index() et rowCount().
Je vais jeté un œil la dessus même s'il ne doit pas être si simple de ré-implanté index()....
Pour le proxymodel il déconseille de l'utilisé dans la doc Qt.
Merci

Hors ligne

#4 22-06-2012 14:15:24

obiwankennedy
Membre(e) Qt
Inscription : 17-01-2008
Messages : 179

Re : affichage par page dans qtableview

Oui tu subclasses le model, tu récupères l'index de ton element tu le modifies par rapport à la page courrant et tu appelles la méthodes index de ta classe parent:

cela fera un truc genre :

Quand je parlais de proxymodel je parlais d'utiliser le principe du proxymodel, pas de la classe QProxyModel.
La classe QProxyModel a été remplacé par celle ci:
http://doc-snapshot.qt-project.org/4.8/ … model.html
L'utilisateur d'un proxy pour son model est une façon élégante de modifier le comportement d'un model.

Dernière modification par obiwankennedy (22-06-2012 15:09:23)

Hors ligne

#5 26-06-2012 11:51:00

Ero-sennin95
Membre(e) Qt
Inscription : 21-03-2010
Messages : 16

Re : affichage par page dans qtableview

Ok merci,
Peut tu m'expliquer quelque point de ton code:
dans la fonction createindex le troisieme parametre tu lui envoie index.parent alors que normalement c'est un Qint32???
Et tu renvoi un QSqlModel?
J'ai un peu de mal!:)

Hors ligne

#6 28-06-2012 23:50:30

obiwankennedy
Membre(e) Qt
Inscription : 17-01-2008
Messages : 179

Re : affichage par page dans qtableview

les deux existent :
http://doc.qt.nokia.com/4.7-snapshot/qa … model.html

Je n'ai pas utilisé un model SQL mais un abstract model pour faire mon truc mais rien ne change. Je pense. Tu peux mettre n'importe quoi ce paramètre est important surtout pour les arbres, afin de retrouver les données associées tu peux mettre l'id de ta ligne sql se genre de truc.

Pour te donner un exemple, imagine que tu affiches 4 éléments par page. Tu as 10 éléments à afficher.

Tu peux calculer que la page 0 affichera les éléments à l'index réel : 0, 1 , 2 et 3.
La page 1 affichera : les éléments : 4,5,6 et 7
La page 2 affichera ; les éléments : 8 et 9

Au début de ton application, tu démarres à la page 0. Ton model informe la vue qu'elle doit afficher 4 éléments.
La vue va demander au model, les éléments : 0, 1 , 2 et 3. Tu fais la petite fonction de calcul;


NouvellePosition = 0*4+0
NouvellePosition == 0

NouvellePosition = 0*4+1
NouvellePosition == 1


NouvellePosition = 0*4+2
NouvellePosition == 2

NouvellePosition = 0*4+3
NouvellePosition == 3

Maintenant l'utilisateur change de page pour la deuxième page. Le model informe la vue que toutes les données ont changé (ce qui est le cas du point de vue de la vue).
Le model dit a la vue qu'elle affichera 4 éléments. Donc la vue demande ces éléments : 0, 1 , 2 et 3. Tu fais la petite fonction de calcul;

NouvellePosition = 1*4+0
NouvellePosition == 4

NouvellePosition = 1*4+1
NouvellePosition == 5


NouvellePosition = 1*4+2
NouvellePosition == 6

NouvellePosition = 1*4+3
NouvellePosition == 7

On retrouve les index que j'avais dit.

Maintenant la troisième page: Le model informe la vue que toutes les données ont changé (ce qui est le cas du point de vue de la vue).
Le model dit a la vue qu'elle affichera 2 éléments. Donc la vue demande ces éléments


NouvellePosition = 2*4+0
NouvellePosition == 8

NouvellePosition = 2*4+1
NouvellePosition == 9

L'index décalé avec la bonne valeur peut être demandé au vrai model SQL.

Hors ligne

#7 03-07-2012 10:27:26

Ero-sennin95
Membre(e) Qt
Inscription : 21-03-2010
Messages : 16

Re : affichage par page dans qtableview

ok cool merci a toi je vais creuser la question!

Hors ligne

Pied de page des forums


Sitemap QtFR