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

Discussion :

Signaux & Slots deffaillants / Conseil Effets

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 47
    Points : 11
    Points
    11
    Par défaut Signaux & Slots deffaillants / Conseil Effets
    Hello !

    Alors, ma classe marche parfaitement, voici quand meme les sources:
    Header:
    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
    #ifndef DIALOGS_H
    #define DIALOGS_H
     
    #include <QObject>
     
    #include "div.h"
     
    class dialogs : public QObject
    {
    public:
        dialogs(const QString &title, hdiv &parent);
        hdiv *getDialog();
     
     
    private:
        hdiv *_tmpdiv;
     
        void addTitlePicture();
        void addCloseButton();
        void addContent();
    public slots:
        void closeDialog();
    };
     
    #endif // DIALOGS_H
    Source:
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #include "dialogs.h"
    #include "const.h"
     
     
    #include <QMessageBox>
    #include <QPushButton>
    dialogs::dialogs(const QString &title, hdiv &parent)
    {
        hdiv *t = new hdiv(title, false, parent);
        _tmpdiv = t;
        _tmpdiv->setStyle(QString::fromUtf8("background-color: rgb(0, 0, 0);background-image: url(:/bg-images/background-menu.png)"));
        _tmpdiv->resize(QRect(0,0,249,282));
     
        addTitlePicture();
        addCloseButton();
    }
    hdiv *dialogs::getDialog()
    {
        return _tmpdiv;
    }
    void dialogs::addTitlePicture()
    {
        QString divtitle = _tmpdiv->getID();
        divtitle.append("-title");
        hdiv *t = new hdiv(divtitle,false,*_tmpdiv);
        t->resize(QRect(10,10,192,9));
        QString stylesheet = "background-color: ";
        stylesheet.append(QString(HS_COLOR_DIALOGS_BACKGROUND));
        stylesheet.append(";background-image: url(:/bg-images/images/");
        stylesheet.append(_tmpdiv->getID());
        stylesheet.append("-title-bgpicture.png)");
        t->setStyle(stylesheet);
        _tmpdiv->appendChild(t);
    }
    void dialogs::addCloseButton()
    {
        QString divtitle = _tmpdiv->getID();
        divtitle.append("-closebutton");
        hdiv *t = new hdiv(divtitle,false,*_tmpdiv);
        t->resize(QRect(219,5,24,23));
        QPushButton *qpb = new QPushButton(t->getWidget());
        qpb->setGeometry(QRect(0,0,24,23));
        QString stylesheet = "QPushButton { border:none; background-color: ";
        stylesheet.append(QString(HS_COLOR_DIALOGS_BACKGROUND));
        stylesheet.append(";background-image: url(:/bg-images/images/");
        stylesheet.append("closebutton-bgpicture.png)}");
        qpb->setStyleSheet(stylesheet);
        t->appendChild(qpb);
        stylesheet = "background-color: ";
        stylesheet.append(QString(HS_COLOR_DIALOGS_BACKGROUND));
        stylesheet.append(";background-image: none;");
        t->setStyle(stylesheet);
        t->connect(qpb,SIGNAL(clicked()), this, SLOT(closeDialog()));
        _tmpdiv->appendChild(t);
    }
    void dialogs::closeDialog()
    {
        QMessageBox mb;
        mb.setText("Closing dialog");
        mb.exec();
    }
    Mon signal devrait etre emis lorsque je clicke sur le bouton, et appeler dialogs::closeDialog()
    Or, quand je compile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Starting C:/dev/HighStory/HighStory_Client/debug/HighStory_Client.exe
    Object::connect: No such slot QObject::closeDialog()
    Pourquoi ? O.o


    -----------------------------------------------

    Ensuite, j'aurais besoin de quelques conseils sur des effets. Je m'explique.

    Vous connaissez probablement Le Prototype JavaScript & Script.aculo.us
    Ils permettent notamment de faire de MAGNIFIQUES effets (fade, move, shake, etc)

    On fait ca comment en Qt ? o.o



    m'ci

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par secksy Voir le message
    Pourquoi ? O.o
    tu as oublié la macro Q_OBJECT dans ta class.
    Si c'est une class graphique, pourquoi hérité de QObject??
    qu'es ce que div???


    Ensuite, j'aurais besoin de quelques conseils sur des effets. Je m'explique.

    Vous connaissez probablement Le Prototype JavaScript & Script.aculo.us
    Ils permettent notamment de faire de MAGNIFIQUES effets (fade, move, shake, etc)

    On fait ca comment en Qt ? o.o
    si tu veut ajouter des effets comme cela, regarde les QGraphic* et Qanimation :
    http://qt.developpez.com/doc/4.4/graphicsview/
    http://qt.developpez.com/doc/4.4/qgraphicsproxywidget/
    http://qt.developpez.com/outils/?pag...ationframework

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    tu as oublié la macro Q_OBJECT dans ta class.
    Si c'est une class graphique, pourquoi hérité de QObject??
    qu'es ce que div???



    si tu veut ajouter des effets comme cela, regarde les QGraphic* et Qanimation :
    http://qt.developpez.com/doc/4.4/graphicsview/
    http://qt.developpez.com/doc/4.4/qgraphicsproxywidget/
    http://qt.developpez.com/outils/?pag...ationframework


    Donc jai remplace le debut de la declaration par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class dialogs
    {
        Q_OBJECT
    public:
    hdiv ?
    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
    #ifndef DIV_H
    #define DIV_H
     
    #include <QObject>
    #include <QRect>
    #include <QCursor>
     
    class hdiv : public QObject
    {
    public:
        // constructor
        hdiv(const QString &id, bool mw);
        hdiv(const QString &id, bool mw, hdiv &parent);
        // DIV func.
        QWidget *getWidget();
        void appendChild(QObject *qobj);
        bool hasChildNodes();
        QList<QObject *> childNodes();
        QString getID();
        void setStyle(const QString &StyleSheet);
        QObject *firstChild();
        void resize(QRect size);
        void show();
        QRect getDivRect();
        quint16 getDivWidth();
        quint16 getDivHeight();
        quint16 getDivOffsetTop();
        quint16 getDivOffsetLeft();
        // main Win. func.
        void Window(const QString &title, const QRect &qr, bool fixedSize, const QCursor &qc);
        bool hasWindow();
        QRect getWindowRect();
        quint16 getWindowWidth();
        quint16 getWindowHeight();
        quint16 getWindowOffsetTop();
        quint16 getWindowOffsetLeft();
    private:
        QWidget *qw;
        QList<QObject *> _childs;
        bool _mw;
        bool _window;
        QWidget *qwindow;
    };
     
    #endif // DIV_H


    Bon bah, qui dit changement du code, dit nouvelles erreurs !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dialogs.h:12: warning: `class dialogs' has virtual functions but non-virtual destructor
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    & toujours mon signal, 
    dialogs.cpp:59: error: no matching function for call to `hdiv::connect(QPushButton*&, const char[11], dialogs* const, const char[15])'
    ../../../Qt/QtCreator/qt/include/QtCore/../../src/corelib/kernel/qobject.h:197: note: candidates are: static bool QObject::connect(const QObject*, const char*, const QObject*, const char*, Qt::ConnectionType)
    ../../../Qt/QtCreator/qt/include/QtCore/../../src/corelib/kernel/qobject.h:303: note: bool QObject::connect(const QObject*, const char*, const char*, Qt::ConnectionType) const

    Au passage, si t'as une petite correction/amelioration a faire dans la delcaration, fais toi plaiz'

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Pour ton connect, tu confonds en fait la fonction membre "connect" et la fonction static "connect". La syntaxe la plus généralement utilisée est celle de la fonction static, car plus généraliste.

    donc au lieu de faire "t->connect", fait "QObject::connect".

    C'est d'ailleurs écrit dans ton message d'erreur.

    Pour ce qui est de ta fonction virtuelle, donne nous exactement la ligne concernée (ligne 12). Sinon, je ne vois pas vraiment.

    BOnne chance

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    11: class dialogs
    12: {
    13:    Q_OBJECT
    14: public:
     
        dialogs(const QString &title, hdiv &parent);
        hdiv *getDialog();
    C'est surtout pour ca que jai pas reussi a fixer lerreur .... =P

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Ah facile,

    La macro Q_OBJECT ne fonctionne qu'avec des classes dérivées de QObejct.

    Donc il faut que ton entête ressemble à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class dialogs : public QObject //ou public QWidget ...
    12: {
    13:    Q_OBJECT
    14: public:
     
        dialogs(const QString &title, hdiv &parent);
        hdiv *getDialog();
    Voilà, dis moi si tu rencontre d'autres problèmes,

    G.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dialogs.cpp: In member function `hdiv* dialogs::getDebugField()':
    dialogs.cpp:93: warning: control reaches end of non-void function
    g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\HighStory_Client.exe debug/main.o debug/sockethandler.o debug/highpacket.o debug/div.o debug/dialogs.o debug/qrc_images.o  -L"c:\Qt\QtCreator\qt\lib" -lmingw32 -lqtmaind -lQtScriptd4 -lQtSvgd4 -lQtGuid4 -lQtNetworkd4 -lQtCored4
    debug/dialogs.o(.text+0x159): In function `ZN7dialogsC2ERK7QStringR4hdiv':
    C:/dev/HighStory/HighStory_Client/dialogs.cpp:11: undefined reference to `vtable for dialogs'
    debug/dialogs.o(.text+0x421): In function `ZN7dialogsC1ERK7QStringR4hdiv':
    C:/dev/HighStory/HighStory_Client/dialogs.cpp:11: undefined reference to `vtable for dialogs'



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    hdiv *dialogs::getDebugField()
    {
        //
    }


    Ca commence a menerver..

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Comment compile tu?
    Ici tu as un problème avec un fichier qui n'est pas moccé ou dont le .cpp générré n'est pas ajouté

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Euh pour le warning, c'est simple, tu dis que tu retournes un hdiv* , mais tu ne retournes rien. Le compilateur se pose des questions ! Mets un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return ; // ou return 0; ou return NULL ;
    Pour l'autre, ça a en effet l'air d'être une erreur de link. Qu est ce qu'il y a à la ligne 11 de dialogs.cpp ?

    g.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Ok le hdiv c'est fixé merci,

    voici les 13 premiers lignes de dialogs.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include "dialogs.h"
    #include "const.h"
     
    #include <QString>
    #include <QMessageBox>
    #include <QPushButton>
    #include <QLabel>
    #include <QLineEdit>
     
    dialogs::dialogs(const QString &title, hdiv &parent)
    {
        hdiv *t = new hdiv(title, false, parent);
        _tmpdiv = t;
    voici l'erreur actuelle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    debug/dialogs.o(.text+0x159): In function `ZN7dialogsC2ERK7QStringR4hdiv':
    C:/dev/HighStory/HighStory_Client/dialogs.cpp:11: undefined reference to `vtable for dialogs'
    debug/dialogs.o(.text+0x421): In function `ZN7dialogsC1ERK7QStringR4hdiv':
    C:/dev/HighStory/HighStory_Client/dialogs.cpp:11: undefined reference to `vtable for dialogs'

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Peut être devrais tu appeler le constructeur de QObject dans ton constructeur de dialogs.

    Un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dialogs::dialogs(const QString &title, hdiv &parent):QObject(parent)
    {
        hdiv *t = new hdiv(title, false, parent);
        _tmpdiv = t;
    moc.exe doit sans doute être utilisable uniquement sur des dérivés de QObject.

    Bonne chance,

    G.

    Edit : Euh, mon bout de code n'est peut être pas exact. Il faut sûrement transformer "parent" en QObject*. Il se peut qu'il faille caster et/ou mettre une reference.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    jcomprend plus rien.

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    jcomprend plus rien.
    Tu peux être plus précis ?
    Ce que tu ne dois sans doute pas comprendre, c'est que ton compilateur usuel (g++ dans ton cas) est capable de compiler du code c++. Hors le code spécifique Qt (du genre les signaux/slots) n'est pas compréhensible par ton compilateur.

    Il existe donc des outils intermédiaires, permettant de traduire les parties du code Qt en code c++ pur (pour faire simple). moc.exe est un de ces outils.
    La macro Q_OBJECT indique à moc que du code spécifique Qt est présent dans cette classe, et qu'un traitement est nécessaire. Cependant, je pense qu'en plus cette classe doit être dérivée de QObject.

    As tu essayé la modif que je t'ai proposé ?

    G.

  14. #14
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    C'est vraiment un enfer le C++, quand tu change un truc, tas dautres erreurs qui viennent etc .... On aurait du l'appeler C++deboulesdeneigesdanstatete
    Entre les pointeurs demoniaques, Q_Object les signaux jsuis vraiment perdu =p

    jposte tout,ca ira plus vite ;o

    EDIT: Je code, compile avec Qt Creator !


    build:
    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
    Running build steps for project HighStory_Client...
    Configuration unchanged, skipping QMake step.
    Starting: C:/dev/mingw/bin/mingw32-make.exe debug -w 
    C:\dev\mingw\bin\mingw32-make.exe: Entering directory `C:/dev/HighStory/HighStory_Client'
    C:/dev/mingw/bin/mingw32-make.exe -f Makefile.Debug
    mingw32-make.exe[1]: Entering directory `C:/dev/HighStory/HighStory_Client'
    g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_SCRIPT_LIB -DQT_SVG_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\Qt\QtCreator\qt\include\QtCore" -I"..\..\..\Qt\QtCreator\qt\include\QtCore" -I"..\..\..\Qt\QtCreator\qt\include\QtNetwork" -I"..\..\..\Qt\QtCreator\qt\include\QtNetwork" -I"..\..\..\Qt\QtCreator\qt\include\QtGui" -I"..\..\..\Qt\QtCreator\qt\include\QtGui" -I"..\..\..\Qt\QtCreator\qt\include\QtSvg" -I"..\..\..\Qt\QtCreator\qt\include\QtSvg" -I"..\..\..\Qt\QtCreator\qt\include\QtScript" -I"..\..\..\Qt\QtCreator\qt\include\QtScript" -I"..\..\..\Qt\QtCreator\qt\include" -I"c:\Qt\QtCreator\qt\include\ActiveQt" -I"debug" -I"." -I"..\..\..\Qt\QtCreator\qt\mkspecs\win32-g++" -o debug\dialogs.o dialogs.cpp
    dialogs.cpp: In constructor `dialogs::dialogs(const QString&, hdiv*)':
    dialogs.cpp:10: error: no matching function for call to `hdiv::hdiv()'
    div.h:9: note: candidates are: hdiv::hdiv(const hdiv&)
    div.h:13: note: hdiv::hdiv(const QString&, bool, hdiv*)
    div.h:12: note: hdiv::hdiv(const QString&, bool)
    dialogs.cpp: In member function `void dialogs::addCloseButton()':
    dialogs.cpp:58: error: `connect' is not a member of `dialogs'
    mingw32-make.exe[1]: Leaving directory `C:/dev/HighStory/HighStory_Client'
    C:\dev\mingw\bin\mingw32-make.exe: Leaving directory `C:/dev/HighStory/HighStory_Client'
    mingw32-make.exe[1]: *** [debug/dialogs.o] Error 1
    C:\dev\mingw\bin\mingw32-make.exe: *** [debug] Error 2
    Exited with code 2.
    Error while building project HighStory_Client
    When executing build step 'Make'
    dialogs.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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    #include "dialogs.h"
    #include "const.h"
    #include "div.h"
    #include <QString>
    #include <QMessageBox>
    #include <QPushButton>
    #include <QLabel>
    #include <QLineEdit>
     
    dialogs::dialogs(const QString &title, hdiv *parent){
        hdiv *t = new hdiv(title, false, *&parent);
        _tmpdiv = t;
        _tmpdiv->setStyle(QString::fromUtf8("background-color: rgb(0, 0, 0);background-image: url(:/bg-images/background-menu.png)"));
        _tmpdiv->resize(QRect(0,0,249,282));
     
        addTitlePicture();
        addCloseButton();
     
        _currentOffsetTop = 40;
        _currentOffsetLeft = 0;
    }
    hdiv *dialogs::getDialog()
    {
        return _tmpdiv;
    }
    void dialogs::addTitlePicture()
    {
        QString divtitle = _tmpdiv->getID();
        divtitle.append("-title");
        hdiv *t = new hdiv(divtitle,false,*&_tmpdiv);
        t->resize(QRect(10,10,192,9));
        QString stylesheet = "background-color: ";
        stylesheet.append(QString(HS_COLOR_DIALOGS_BACKGROUND));
        stylesheet.append(";background-image: url(:/bg-images/images/");
        stylesheet.append(_tmpdiv->getID());
        stylesheet.append("-title-bgpicture.png)");
        t->setStyle(stylesheet);
        _tmpdiv->appendChild(t);
    }
    void dialogs::addCloseButton()
    {
        QString divtitle = _tmpdiv->getID();
        divtitle.append("-closebutton");
        hdiv *t = new hdiv(divtitle,false,*&_tmpdiv);
        t->resize(QRect(219,5,24,23));
        QPushButton *qpb = new QPushButton(t->getWidget());
        qpb->setGeometry(QRect(0,0,24,23));
        QString stylesheet = "QPushButton { border:none; background-color: ";
        stylesheet.append(QString(HS_COLOR_DIALOGS_BACKGROUND));
        stylesheet.append(";background-image: url(:/bg-images/images/");
        stylesheet.append("closebutton-bgpicture.png)}");
        qpb->setStyleSheet(stylesheet);
        t->appendChild(qpb);
        stylesheet = "background-color: ";
        stylesheet.append(QString(HS_COLOR_DIALOGS_BACKGROUND));
        stylesheet.append(";background-image: none;");
        t->setStyle(stylesheet);
        dialogs::connect(qpb,SIGNAL(clicked()), this, SLOT(closeDialog()));
        _tmpdiv->appendChild(t);
    }
    void dialogs::addFormLine(const QString &label)
    {
        QFont font("verdana", 8);
        hdiv *t = new hdiv(QString("form-line-" + label),false,*&_tmpdiv);
        QLineEdit *ql = new QLineEdit(t->getWidget());
        ql->setFont(font);
        ql->setText(label);
        QString stylesheet = "border:none; background: ";
        stylesheet.append(QString(HS_COLOR_DIALOGS_BACKGROUND));
        stylesheet.append("; color:");
        stylesheet.append(QString(HS_COLOR_DIALOGS_FONT));
        ql->setStyleSheet(stylesheet);
        ql->setReadOnly(true);
        ql->setGeometry(QRect(0,0,70,20));
        // we gonna align all labels, at 70px
        // label height = 20 px
        QLineEdit *qle = new QLineEdit(t->getWidget());
        qle->setObjectName(QString("form-line-" + label + "-inputline"));
        qle->setFont(font);
        qle->setGeometry(QRect(80,0,70,20));
        t->resize(QRect(((_currentOffsetLeft == 0) ? 30 : 0),_currentOffsetTop+_formContents.count()*23,140,23));
        t->appendChild(ql);
        t->appendChild(qle);
        registerFormComponent(qle);
    }
    void dialogs::addDebugField(hdiv &dbugfld)
    {
    }
    hdiv *dialogs::getDebugField()
    {
     
        hdiv *p;
        return p;
    }
    void dialogs::addButtons(QList<QObject *> &qbs)
    {
    }
    void dialogs::registerFormComponent(QLineEdit *qobj)
    {
        _formContents.append(qobj);
    }
     
     
     
     
    void dialogs::closeDialog()
    {
        QMessageBox mb;
        mb.setText("Closing dialog");
        mb.exec();
    }
    dialogs.h
    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
    #ifndef DIALOGS_H
    #define DIALOGS_H
     
    #include <QObject>
    #include <QList>
     
    #include <QLineEdit>
     
    #include "div.h"
     
    class dialogs : public QWidget, public hdiv
    {
        Q_OBJECT
    public:
     
        dialogs(const QString &title, hdiv *parent);
        ~dialogs();
        hdiv *getDialog();
     
        void addFormLine(const QString &label);
        void addDebugField(hdiv &dbugfld);
        hdiv *getDebugField();
        void addButtons(QList<QObject *> &qbs);
     
    private:
        hdiv *_tmpdiv;
        QList<QWidget *> _formContents;
        QList<QObject *> _form;
        quint16 _currentOffsetLeft;
        quint16 _currentOffsetTop;
     
     
        void addTitlePicture();
        void addCloseButton();
        void registerFormComponent(QLineEdit *qobj);
    public slots:
        void closeDialog();
    };
     
    #endif // DIALOGS_H
    div.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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    #include <QWidget>
    #include "div.h"
    hdiv::hdiv(const QString &id, bool mw)
    {
        _mw = mw;
        setObjectName(id);
        qw = new QWidget();
    }
    hdiv::hdiv(const QString &id, bool mw, hdiv *parent)
    {
        _mw = mw;
        setObjectName(id);
        qw = new QWidget(parent->qw);
    }
    QWidget *hdiv::getWidget()
    {
        return qw;
    }
    void hdiv::Window(const QString &title, const QRect &qr, bool fixedSize, const QCursor &qc)
    {
        _window = true;
        qwindow = qw;
        qwindow->setWindowTitle(title);
        qwindow->setCursor(qc);
        qwindow->setGeometry(qr);
        qwindow->show();
     
    }
    bool hdiv::hasWindow()
    {
        return _window;
    }
    QRect hdiv::getDivRect()
    {
        return qw->geometry();
    }
    quint16 hdiv::getDivWidth()
    {
        return getDivRect().width();
    }
    quint16 hdiv::getDivHeight()
    {
        return getDivRect().height();
    }
    quint16 hdiv::getDivOffsetTop()
    {
        return getDivRect().y();
    }
    quint16 hdiv::getDivOffsetLeft()
    {
        return getDivRect().x();
    }
    QRect hdiv::getWindowRect()
    {
        return qwindow->geometry();
    }
    quint16 hdiv::getWindowWidth()
    {
        return getWindowRect().width();
    }
    quint16 hdiv::getWindowHeight()
    {
        return getWindowRect().height();
    }
    quint16 hdiv::getWindowOffsetTop()
    {
        return getWindowRect().y();
    }
    quint16 hdiv::getWindowOffsetLeft()
    {
        return getWindowRect().x();
    }
    void hdiv::appendChild(QObject *qobj)
    {
        _childs.append(qobj);
    }
    bool hdiv::hasChildNodes()
    {
        return (_childs.count() == 0)?false:true;
    }
    QString hdiv::getID()
    {
        return objectName();
    }
    QList<QObject *> hdiv::childNodes()
    {
        return _childs;
    }
    QObject *hdiv::firstChild()
    {
        return _childs.takeAt(0);
    }
    void hdiv::resize(QRect size)
    {
        qw->setGeometry(size);
    }
    void hdiv::setStyle(const QString &StyleSheet)
    {
        qw->setStyleSheet(StyleSheet);
    }
    void hdiv::show()
    {
        qw->show();
    }
    div.h
    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
    #ifndef DIV_H
    #define DIV_H
     
    #include <QObject>
    #include <QRect>
    #include <QCursor>
     
    class hdiv : public QObject
    {
    public:
        // constructor
        hdiv(const QString &id, bool mw);
        hdiv(const QString &id, bool mw, hdiv *parent);
        // DIV func.
        QWidget *getWidget();
        void appendChild(QObject *qobj);
        bool hasChildNodes();
        QList<QObject *> childNodes();
        QString getID();
        void setStyle(const QString &StyleSheet);
        QObject *firstChild();
        void resize(QRect size);
        void show();
        QRect getDivRect();
        quint16 getDivWidth();
        quint16 getDivHeight();
        quint16 getDivOffsetTop();
        quint16 getDivOffsetLeft();
        // main Win. func.
        void Window(const QString &title, const QRect &qr, bool fixedSize, const QCursor &qc);
        bool hasWindow();
        QRect getWindowRect();
        quint16 getWindowWidth();
        quint16 getWindowHeight();
        quint16 getWindowOffsetTop();
        quint16 getWindowOffsetLeft();
    private:
        QWidget *qw;
        QList<QObject *> _childs;
        bool _mw;
        bool _window;
        QWidget *qwindow;
    };
     
    #endif // DIV_H
    EDIT:
    Ca pourrais servir:
    en gros, la classe div sert de conteneur (que jessaye de rendre equivalents aux div en HTML). la classe dialogs me sert a faire des petits menus graphiques (par ex: un formulaire).
    Les deux peuvent etre donc objet, et widget ... cest surement pour ca que jy arrive pas. En javascript, java, php tout ca cest simplifié...
    J'ai ajouté tout le projet en fichiers joints, comme ca pour ceux qui veulent tester tout ca ils peuvent s'amuser ^_^
    Fichiers attachés Fichiers attachés

  16. #16
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par secksy Voir le message
    C'est vraiment un enfer le C++, quand tu change un truc, tas dautres erreurs qui viennent etc .... On aurait du l'appeler C++deboulesdeneigesdanstatete
    Entre les pointeurs demoniaques, Q_Object les signaux je suis vraiment perdu =p
    C'est surtout que tu as des manques sur le C++...
    Première chose bizarres tu as fait une classe graphique en héritant de QObject.... pourquoi?

    Que cherche tu as faire ? un layout particulier??

  17. #17
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Euh, je suis désolé de te l'annoncer, mais je crois en effet que tu as quelques lacunes en C++, lacunes qui t'empêcheront d'utiliser convenablement Qt et sa toute surpuissance atomique !

    Non, je crois qu'il faudrait déjà que tu commences par le début, à savoir éclairicir dans ta tête ce qu'est un pointeur, un pointeur de pointeur, leur représentation dans la mémoire, etc.

    Ca te paraît sans doute con, long, contraignant et totalement inutile, mais si tous les vieux cons de prof, et les vieux cons du forum continuent de te dire que c'est important, c'est peut être parce que c'est un peu vrai .

    Et sinon, il faudrait aussi que tu essaies de sortir des modèles html et Javascript. Ces langages, comme le C++, ont leur spécifités et utilités. Et je suis sûr que si tu arrêtais de te dire "le div c'est trop bien", et ben tu verrais sans doute que le C++ et Qt proposent des objets/outils au moins aussi bien, voire peut être, un tout petit peu mieux .

    Bonne chance,

    G.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Je sais que j'suis un newb =D
    Mais quand on vient du web c'est du de partir des bon vieux acquis.

    Les cours sur les pointeurs, jen ai lu pleins, je suis toujours autant perdu.


    @ mongaulois
    Heuu, jessaye davoir un outil qui puisse me servir d'objet et d'outil graphique ? =D

  19. #19
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Eh bien je ne sais que te dire. Si tu ne veux pas te relancer dans "la théorie", tu dois sans doute pouvoir trouver dans les exemples fournis avec Qt (qtDemo) quelque chose qui ressemble à ce que tu veux faire. Tu peux toujours relire le code et t'en inspiré fortement pour faire ce que tu veux. Peut être que la philosophie de Qt t'apparaîtra de cette manière.

    Ou alors, tu peux nous faire un dessin de ce que tu voudrais faire, et on pourra t'orienter plus convenablement.

    Bonne chance,

    G.

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 47
    Points : 11
    Points
    11
    Par défaut
    Gulish:

    Ok je ferais un dessin + description textuelle ce soir, ca me conviens bien cette idee

    a ce soir : )

    : controle ENSL ;(

Discussions similaires

  1. Signaux et slots comme Qt
    Par b Oo dans le forum Qt
    Réponses: 21
    Dernier message: 11/04/2007, 18h57
  2. [Qt4] Signaux et Slot
    Par gentox dans le forum Qt
    Réponses: 9
    Dernier message: 25/01/2007, 19h35
  3. Réponses: 10
    Dernier message: 09/10/2005, 23h33

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