Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.8.0 - Qt Creator : 4.2.2 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

[Qt4-Win] StatusTip capricieux dans une implementation model/view

Bonjour à tous , petite question rapide en passant:

Lors d'une implémentation d'un model/view ( QAbstractTableModel/QTableView)
j'ai été amené à redéfinir la virtuelle pure QVariant data(const QModelIndex&, int role) const
afin d'informer ma tableView sur ce qu'elle doit afficher.

Tout se passait bien pour les roles DisplayRole et ToolTipRole jusqu'à ce que je cherche à rajouter un StatusTipRole.
La compilation se fait sans problème mais le résultat est surprenant:
afin que le statusTip apparaisse en bas de ma fenetre(qui definit une statusBar)
je dois cliquer un grand nombre de fois comme une brute pour qu'il apparaisse.
Son comportement est iérathique.

Voilà un bout de code afin de bien fixer l'idée:

QVariant MyTableModel::data(const QModelIndex& index, int role) const
{
if ( ! index.isValide() ) return QVariant();

switch(role)
{
case Qt::StatusTipRole : return QString( "Test de StatusTip retourne par mon model/vue");

.......
}

Le meme code appliqué à ToolTipRole fonctionne nickel.

La question fatale est donc la suivante:
est-ce moi ou est-ce une bug?

Merci de me répondre.

Réponses

  • bibi fricotin said:
    Son comportement est iérathique.
    ????

    hiératique : du grec 'hieratkos', qui concerne les choses sacrées ...

    ou erratique : irrégulier

    peut-être aléatoire : hasardeux

    précise pour quoi réimplémenter QAbstractTableModel::data( const QModelIndex & index, int role ) const
  • c'est un exemple inspiré du chapitre 10 de "C++ GUI Programming With Qt 4" sur une tableview des monnaies.
    mon modèle encapsule un QMap.
    En redefinissant la fct data(,),on fait croire à la vue qu'elle travaille avec un modèle à 2 dimensions.

    Mais le problème concerne StatusTipRole.
    A suivre.
  • à quel moment doit s'afficher le StatusTip?

    j'ai essayé avec un QStandardItemModel, je vois le tool tip, mais pas le status tip
  • Normalement au moment du clic sur l'item.
    Essaie avec acharnement et il finit par arriver mais c'est totalement erratique.
    Peut-etre cela est-il du au fait que la statusbar n'appartient pas à l'objet de vue.

    A suivre
  • hiérarchie au sens parent/enfant de QObject:
    main window
    status bar
    une widget
    une autre widget
    ma table view
    une widget
    ...
  • December 2007 modifié
    en fait, je ne constate pas de fonctionnement erratique

    en revanche un comportement bizarre et régulier:

    je clique: rien ne se passe ???
    je presse le bouton de la souris: rien ne se passe ???
    je déplace la souris, fut-ce d'un pxel, sans avoir relaché le bouton de la souris: le status tip apparaît !!!

    il est probable qu'en t'acharnant à cliquer, tu te trouve à un moment dans ce cas de figure
  • Dans les exemples fournis avec Qt , j'ai trouvé l'éxemple Spreadsheet qui semble utiliser
    les statustip dans le pattern model/view.

    Je vais voir ce que je peux en tirer si mes récentes connaissances de Qt me le permettent.

    En tous cas le statustip s'affiche dès le 1er clic et disparait après un léger mouvement de la souris mais nul besoin de garder le bouton de la souris enfoncé.

    A suivre...
  • ans la démo spreadsheet, le slot updateStatus est connecté
    aux signaux currentItemChanged et itemChanged de la QTableWidget
    cela doit expliquer la différence de comportement
  • Exact.
    En fait il semblerait que le comportement que l'on peut juger étrange du statystip dans le pattern model/view
    soit le comportement choisi par Trolltech.

    et pour etre honnete , je préfère poursuivre mon apprentissage de Qt plutot que de m'enliser dans ce problème
    qui n'en est peut-etre pas un.

    Merci a nicolas et bonnes fetes de fin d'année à tous.
Connectez-vous ou Inscrivez-vous pour répondre.