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

Outils Discussion :

Inclusion d'un widget personnalisé dans Qt Designer


Sujet :

Outils

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 47
    Points
    47
    Par défaut Inclusion d'un widget personnalisé dans Qt Designer
    Boujour à tous.

    Voila donc, j'essaye d'inclure un widget dans les plugins de qt designer de la même façon que les widget "typiques" (genre QPushButton).

    Après plusieurs essais en suivant la doc (creating custom widget for Qt designer), j'ai finit par utiliser le "générateur"(je sais pas comment ça s'appelle) de Qt creator "Widget personnalisé pour Qt4 designer".

    Ainsi, il me génère 4 fichiers, comme dans la doc:
    -> ImageButton.hpp
    -> ImageButton.cpp
    -> ImageButtonPlugin.hpp
    -> ImageButtonPlugin.cpp
    -> Qt_Custom_Widgets.pro

    Bref, que du classique ! J'ai vérifié avec la doc, tout correspond parfaitement, toutes les fonctions à définir dans la description de mon widget sont remplies correctement et le .pro semble convenir.

    Le projet compile (MinGW) me génère ma dll et mon .a dans un dossier voisin de mes sources, je les copie dans le dossier Qt/qt/plugins/designer mais rien ne s'affiche dans Qt designer.

    -> Je compile en release
    -> Je définit la cible (TARGET) comme $$qtLibraryTarget(ImageButtonPlugin), puis le target.path dans: $$[QT_INSTALL_PLUGINS]/designer
    -> J'ai bien les macros Q_INTERFACES(QDesignerCustomWidgetInterface) dans le .hpp du descripteur
    et Q_EXPORT_PLUGIN2(ImageButtonPlugin, ImageButtonPlugin) dans l e .cpp du constructeur.
    -> Mon widget à intégrer ne fait absoluement rien (C'est juste une classe qui hérite de QPushButton en ne faisant rien de plus)
    -> Je compile sous Qt creator avec MinGW
    -> Qt creator (enfin, tout le SDK) est en version 32 bits et je suis sous Window 7 64bits.
    -> J'ai spécifié une icone bien visible pour représenter le widget dans Qt designer (pour pas le louper)

    Il y a quand même plusieurs choses qui m'ont semblées étranges:
    -> Il ne m'a rien généré dans le dossier Qt/qt/plugins/designer, même en lançant Qt creator en mode administrateur.
    -> La première fois que Qt creator a compilé le projet, il a demandé un exécutable. Pensant qu'il s'agissait de l'executable pour générer le plugin, j'ai donné qmake.exe, peut-être une erreur ?

    Voila, je suis à court d'idée car il m'a semblé suivre la doc à la lettre (en essayant ensuite d'autres trucs au fil des forums visités) et que je ne fais rien de plus ou de moins.
    J'ai l'impréssion qu'il s'agit d'une connerie ou d'un truc auquel je suis passé à coté, mais j'arrive pas à voir quoi.

    Merci d'avance pour vos réponses.

    Voici mon code, au cas où:
    Qt_Custom_Widgets.pro
    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
    QT			+= core gui
    CONFIG      += designer plugin debug_and_release
    TARGET      = $$qtLibraryTarget(ImageButtonPlugin)
    TEMPLATE    = lib
     
    HEADERS     = ImageButtonPlugin.hpp
    SOURCES     = ImageButtonPlugin.cpp
    RESOURCES   = icons.qrc
    LIBS        += -L.
     
    target.path = $$[QT_INSTALL_PLUGINS]/designer
    INSTALLS    += target
     
    DEFINES += _DESIGNER_EXPORT
     
    include(ImageButton.pri)
    ImageButtonPlugin.hpp:
    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
    #ifndef IMAGEBUTTONPLUGIN_HPP
    #define IMAGEBUTTONPLUGIN_HPP
     
    #include <QDesignerCustomWidgetInterface>
     
    #include "ImageButton.hpp"
     
    class ImageButtonPlugin : public QObject, public QDesignerCustomWidgetInterface
    {
        Q_OBJECT
        Q_INTERFACES(QDesignerCustomWidgetInterface)
     
    public:
        ImageButtonPlugin(QObject *parent = 0);
     
        bool isContainer() const;
        bool isInitialized() const;
        QIcon icon() const;
        QString domXml() const;
        QString group() const;
        QString includeFile() const;
        QString name() const;
        QString toolTip() const;
        QString whatsThis() const;
        QWidget *createWidget(QWidget *parent);
        void initialize(QDesignerFormEditorInterface *core);
     
    private:
        bool m_initialized;
    };
     
    #endif
    ImageButtonPlugin.cpp:
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #include "ImageButtonPlugin.hpp"
     
    #include <QtCore/QtPlugin>
    #include <QString>
     
    ImageButtonPlugin::ImageButtonPlugin(QObject *parent) : QObject(parent) {
        m_initialized = false; }
     
    void ImageButtonPlugin::initialize(QDesignerFormEditorInterface * /* core */) {
        if (m_initialized)
            return;
        m_initialized = true; }
     
    bool ImageButtonPlugin::isInitialized() const {
        return m_initialized; }
     
    QWidget *ImageButtonPlugin::createWidget(QWidget *parent) {
        return new ImageButton(parent); }
     
    QString ImageButtonPlugin::name() const {
        return QLatin1String("ImageButton"); }
     
    QString ImageButtonPlugin::group() const {
        return QLatin1String("Buttons"); }
     
    QIcon ImageButtonPlugin::icon() const {
    	return QIcon(":/icons/imageButtonIcon.ico"); }
     
    QString ImageButtonPlugin::toolTip() const {
        return QLatin1String("A button represented by an image."); }
     
    QString ImageButtonPlugin::whatsThis() const {
        return QLatin1String("The button is represented by a ratio fixed, scalable image."); }
     
    bool ImageButtonPlugin::isContainer() const {
    	return false; }
     
    QString ImageButtonPlugin::domXml() const {
    	return "<ui language=\"c++\"> \n"
    			"	<widget class=\"ImageButton\" name=\"ImageButton\">\n"
    			"</ui>\n" ; }
     
    QString ImageButtonPlugin::includeFile() const {
        return QLatin1String("ImageButton.hpp"); }
     
    Q_EXPORT_PLUGIN2(ImageButtonPlugin, ImageButtonPlugin)
    Et enfin: ImageButton.hpp:
    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
    #ifndef IMAGEBUTTON_HPP
    #define IMAGEBUTTON_HPP
     
     
    #ifdef _DESIGNER_EXPORT
    #include <QDesignerExportWidget>
    #else
    #define QDESIGNER_WIDGET_EXPORT
    #endif
     
    #include <QtGui/QPushButton>
     
    class QDESIGNER_WIDGET_EXPORT ImageButton : public QPushButton
    {
        Q_OBJECT
    public:
        ImageButton(QWidget *parent = 0);
    };
     
    #endif
    P.S. J'ai pas mis ImageButton.cpp (absolument rien de particulier)
    P.P.S. Désolé pour la quantité de code, j'ai pas trouvé comment "rapplatir" à l'écrant ces parties.

  2. #2
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 835
    Points
    2 835
    Par défaut
    Je n'ai jamais essayé d'ajouter un widget dans le designer, et comme tu as l'air d'avoir bien suivi la doc je ne vois ce qui cloche désolé.
    Je suppose que tu connais aussi, mais à tout hasard si ça peut suffire à tes besoins la "promotion" est beaucoup plus simple :
    http://qt.developpez.com/doc/4.7/des...moting-widgets

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 41
    Points : 47
    Points
    47
    Par défaut
    A vrai dire, pour ce que je veut faire, il y a beaucoup plus simple pour un résultat à peu près bon

    Vu que je fais pas ça dans un contexte professionel, c'est l'occasion d'approfondir un peu pour en apprendre le plus possible sur Qt, ...

  4. #4
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 177
    Points : 321
    Points
    321
    Par défaut
    Bonjour, je n'espère pas remonté un sujet qui date de loin. Mais comme je faisais la recherche pour trouver mon plugins personnalisé dans QtCreator et QtDesigner. Il s’avérait que pour windows seulement on ne peut visualisé mon plugin que dans Qt Designer.

    Enfin bref, pour revenir à ton problème, il faut que tu lance le gestionnaire de ligne de commande Qt à partir du menu (pour moi ça ressemble à ceci : "QtSDK/Desktop/Qt 4.7.3 for Desktop (MinGW)").

    Ensuite, il faut que tu rejoins ton répertoire avec la mention "*-build-desktop".

    Enfin, il suffit juste de lancer la commande "make install" et le plugin s'installera dans le répertoire approprié.

    Mais faut que la compilation ce fasse en mode Release, comme tu l'as précisé.

    J'espère que ça t'auras aidé.

Discussions similaires

  1. [VxiR2] Tri personnalisé dans le Designer
    Par Burt67 dans le forum Designer
    Réponses: 5
    Dernier message: 30/05/2011, 16h25
  2. Impossible d'afficher les widgets GXT dans GWT Designer
    Par goeland444 dans le forum GWT et Vaadin
    Réponses: 1
    Dernier message: 06/04/2011, 18h58
  3. [Visual Studio] Ajouter un widget perso dans le designer
    Par guillaume07 dans le forum EDI
    Réponses: 6
    Dernier message: 28/10/2009, 16h39
  4. Réponses: 10
    Dernier message: 08/08/2008, 12h58

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