IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Custom widget properties


Sujet :

Qt

  1. #1
    Membre à l'essai Avatar de tendu1
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 17
    Points
    17
    Par défaut Custom widget properties
    Je cherche desesperement un example de codage de propriete de widget avec utilisation de "QDesignerPropertySheetExtension". En effet il est possible que de customiser totalement l'affichage des proprietes dans l'inspecteur d'objet mais le probleme c'est que Trolltech ne fournit que deux maigres example qui ne montre pas comment utiliser QDesignerPropertySheetExtension. Ecepter qu'il faut creer notre propre classe inheritant QDesignerPropertySheetExtension et donc implementer les methodes virtuelles...

    Je voudrais juste savoir comment est-ce que je dois implementer les differentes methodes virtuelles. Cela fait un moment que je bloque la-dessus, une petite aide serai d'un tres grand secour.

    Merci d'avance !

  2. #2
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    La facon dont tu dois implémenter les méthodes virtuelles dépend de ce que tu veux faire et de la fonction, exemple (avec widgetProperty classe qui hérite de QDesignerPropertySheetExtension :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    bool widgetProperty::isVisible () const
    {
         return true ; // en admettant que le widget soit visible
    }
    int widgetProperty::count () const
    {
         return 10 ; // en admettant que le widget possède 10 propriétés
    }
    // etc ...

  3. #3
    Membre à l'essai Avatar de tendu1
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Ok, je comprend bien, ce que je ne saisi pas c'est qu'il y a des setters et getters et la doc n'explique pas grand chose.

    En placant des QDebug() j'ai bien vue qu'il y avait un appel a coun(), sur ce j'ai donc anticipe et implemente un return 12 car j'ai 12 proprietes specifique. Ensuite j'ai aussi note qu'il y avait des appels successif a "propertyName( int )" et "indexOf( const QString & )", ce qui m'a permis de realiser que mes proprietes n'etaient pas forcement "impliquees" et que des appels a "indexOf( const QString & )" etaient fait avec "" en parametre... Ce qui me laisse asse perplexe


    J'ai beau chercher sur le web depuis plusieur jours (au moins 3) et je ne trouve absolument rien sur ce type d'implementation. Basiquement ce que je souhaite faire n'est ni plus ni moins que de "passer" de simple valeur sur mes proprietees. Sur-ce l'on peut me demander mais pourquoi tiens-tu a utiliser ce mechanisme ? En fait je ne suis pas vraiment tenu a l'utilser, je souhaite simplement pouvoir VOIR des proprietees dans l'inspecteur d'objet qui sont en fait des enums de classe ancetres qui elles n'herite pas de QObject...

    Et j'ajoute que dans cette voie encore j'ai essaye le procede:

    enum MajorMinorMode { NoItems = 0, MajorItems = 1, MajorAndMinorItems = 2 };
    Q_DECLARE_METATYPE( MajorMinorMode );

    Puis dans l'init de ma classe plugin:

    qRegisterMetaType<MajorMinorMode>("MajorMinorMode");


    Avec ce code la, je n'obtiens plus de message d'erreur du designer mias lorsque je clicque sur mon widget je peux lire:

    The property "showVerticalGrid" of type 259 (user type) is not supported yet!


    Voila tout ! Donc mon probleme est plus a propos des proprietes que la classe et implementation de QDesignerPropertySheetExtension, enfin.... Je ne sais plus par ou attaquer le probleme.

    Shugo78, si tu as des suggestion ou comment je peux contourner regler le probleme...

  4. #4
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    Es-tu obligé d'utiliser la classe QDesignerPropertySheetExtension ? Ou souhaites tu seulement créé un widget personnalisé intégrable au Qt Designer ?

  5. #5
    Membre à l'essai Avatar de tendu1
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Non, je ne suis pas oblige d'utiliser cette classe, du tout. J'ai juste besoin que de faire apparaitre dans le property editor mes proprietees qui utilisent des enums et qui (ces enums) sont declares dans des classes ancetres qui elles n'heritent pas de QObject.
    Le truc aussi c'est que je ne peux pas faire un stupide "copieur" de prorpietes, je veux dire faire une methode qui va appeler celle qui existe deja avec un nouvel enum (declare dans ma classe actuelle, oui cela marche bien-sur mais je ne peux pas... ).

    Est-ce que Trolltech a un trou dans la raquete a ce niveau la ? Par-ce que pour moi, lorsque je vois:
    The property "showVerticalGrid" of type 259 (user type) is not supported yet!

    Cela me montre que mon type est bien enregistrer mais que derrierre cela ne suit pas....

    Mais pour faire court, oui je souhaites créé un widget personnalisé intégrable au Qt Designer.

  6. #6
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    Si tu as la possibilité tu devrais dériver QDesignerCustomWidgetInterface en réimplémentant les fonctions virtuelles.

  7. #7
    Membre à l'essai Avatar de tendu1
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    J'y ai pense mais je ne peux pas faire cela. Je ne peux pas alterer/modifier la classe existante... Penible

  8. #8
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    Oui c'est un sacré problème que nous avons ici, si tu ne peux pas modifier la classe tu pourrais peut être créer une autre classe dérivant de cette dernière et de QDesignerCustomWidgetInterface ?

  9. #9
    Membre à l'essai Avatar de tendu1
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Je ne peux pas creer une nouvelle classe, il y a du code existant... Cette une lib que je fourni en fait et je ne peux modofer le code a ma guise...

    J'ai jete un oeil sur le fichier qnamespace.h de Qt et cela me semble bien mais cela ne fonctionne pas avec ma propre implementation, je veux dire, j'ai essaye de faire mon propre qMynamespace.h avec le mem principe de directive de compil a l'interrieur, le concept est super interressant mais cela ne fonctionne pas, la compil ne s'acheve pas correctement...

    Merci en tous cas pour ton interret et je ne manquerai pas de poster la soluce si je la trouve et puis si tu en as une ou trouve une, je suis preneur, tu le sais

  10. #10
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    Utilises tu la macro Q_PROPERTY ?

  11. #11
    Membre à l'essai Avatar de tendu1
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Oui, j'utilise Q_PROPERTY...
    En fait je pense (je dis je pense et j'en suis asse sur ) avoir fait tout ce qu'il fallait, toutes mes proprietes utilisants des types standards sont affichees et fonctionnent correctement... C'est juste que celle-ci ne le sont pas (du fait qu'elles soient declarees dans du non QObject herite....). Je dois arriver a trouver un artifice du type qnamespace.h (implementation asse elocante de Trolltech qui joue avec des directives de compilation et fait la difference entre la compil normale et MOC...) ou autre... J'ai fait un courrier a Trolltech... J'attends leur reponse... Je te tiens poste !

  12. #12
    Membre à l'essai Avatar de tendu1
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2008
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Alors, j'ai la reponse maintenant....
    Voici ce qu'il, faut faire:
    il faut declarer une classe qui va contenir l'enum; avec la macro Q_GADET et bien sur ne pas oublier de declarer posterieurement l'enum utilise dans la classe concerne avec le nom de la classe ou l'enum est declare -> MyEnumClass::testEnums



    #include <QWidget>
    #include <QtDesigner/QDesignerExportWidget>

    +class MyEnumClass
    +{
    + Q_GADGET
    + Q_ENUMS(testEnums)
    +public:
    + enum testEnums { Foo, Bar, Baz };
    + MyEnumClass() {}
    +
    +};
    class QDESIGNER_WIDGET_EXPORT AnalogClock : public QWidget
    {
    Q_OBJECT
    -
    + Q_ENUMS(MyEnumClass::testEnums)
    + Q_PROPERTY(MyEnumClass::testEnums testVal READ getTestVal WRITE setTestVal)
    public:
    AnalogClock(QWidget *parent = 0);
    -
    + void setTestVal(MyEnumClass::testEnums e) {}
    + MyEnumClass::testEnums getTestVal() const { return MyEnumClass::Foo; }
    protected:
    void paintEvent(QPaintEvent *event);
    };


    Ca m'a pri un m0mment pour trouver cela et puis un peu de com avec Trolltech aussi

    Bon codage

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [GWT2.6]UIBinder avec custom widget
    Par valkeke dans le forum GWT et Vaadin
    Réponses: 0
    Dernier message: 02/05/2014, 18h31
  2. [Dojo] Custom widget non parsé
    Par andlio dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 10/04/2012, 16h47
  3. création d'un custom widget
    Par telemarker05 dans le forum Qt
    Réponses: 4
    Dernier message: 25/10/2009, 19h22
  4. Réponses: 5
    Dernier message: 20/06/2009, 23h42
  5. Widget Table Properties Sheet
    Par azerr dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 24/03/2008, 21h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo