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 :

Amélioration d'un QPopup


Sujet :

Qt

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut Amélioration d'un QPopup
    Bonjour à tous,

    je viens de faire des modifications sur mon QPopup pour faire en sorte qu'il puisse afficher des messages comme MSN.

    Je voudrais faire encore deux modifications majeur qui sont : L'affiche des QPopup se dispose l'un au dessus de l'autre automatiquement, et affiche x QPopup à la fois, c'est à dire j'affiche par exemple 5 QPopup quand les 5 se sont enlevé hop j'en affiche encore 5 etc...

    Actuellement j'arrive à faire :
    - Affiche le QPopup en bas à droite comme MSN.
    - Dispose les QPopup l'un au dessus de l'autre manuellement.
    - Affichage des QPopup x temps.
    - Joue un son quand un QPopup s'affiche.
    - Taille du QPopup personnalisable.

    Voici le code pour afficher le QPopup donc .cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    QPopup *t = new QPopup(200,200,1); // QPopup taille : 200 sur 200. S'affiche en bas si 1, s'affiche au dessus si 2
    t->Show(QString("Programme"), QString(e.text()),5000); // Message s'affichant pendant 5 secondes.
    Voici le code du QPopup donc .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
    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
    112
     
    #include <QtGui>
    #include <QtCore/QtCore>
    #include <QtCore/QObject>
    #include <windows.h>
     
    const int SCREENX = GetSystemMetrics(SM_CXSCREEN);
    const int SCREENY = GetSystemMetrics(SM_CYSCREEN);
     
    class QPopup : public QDialog
    {
        Q_OBJECT;
     
        private:
            int mqx;
            int mqy;
            int mpx;
            int mpy;
            bool etat;
            QLabel *label;
            QGridLayout *layout;
     
        public:
            QPopup(const int x, const int y, int py = 1)
            {
                etat = false;
                init(x,y);
     
                if(py < 1)
                    py = 1;
     
                for(int i = 1; i<py; i++)
                {
                    mpy-=y;
                }
            }
     
            void addWid(QWidget* widget,const int a = 0,const int b = 0,const int c = 0,const int d = 0)
            {
                layout->addWidget(widget,a,b,c,d);
            }
     
            void Show(const QString titre,const QString texte,const int _ti = 3000)
            {
                checkEtat();
                label->setText(texte);
                setWindowTitle(titre);
     
                QSound son("sons/alerte.wav");
                son.play();
     
                QTimer* timer = new QTimer(this);
                QObject::connect(timer,SIGNAL(timeout()), this ,SLOT(animateClose()));
                animateShow();
                timer->start(_ti);
            }
     
        public slots:
            void animateShow()
            {
                checkEtat();
                setGeometry(mpx,SCREENX,mqx,mqy);
                show();
     
                for(int i = SCREENX; i >= mpy; i--)
                {
                    setGeometry(mpx,i,mqx,mqy);
                }
            }
     
            void animateClose()
            {
                checkEtat();
     
                for(int i = mpy; i < SCREENX; i++)
                {
                    setGeometry(mpx,i,mqx,mqy);
                }
                close();
            }
     
        private:
            void init(const int x,const int y)
            {
                mqx = x;
                mqy = y;
                mpx = SCREENX-(mqx+40);
                mpy = SCREENY-(mqy+40);
     
                label = new QLabel(this);
                layout = new QGridLayout(this);
     
                label->resize(mqx,mqy);
                label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
                label->setWordWrap(true);
     
                layout->addWidget(label);
                setLayout(layout);
                setGeometry(mpx,mpy,mqx,mqy);
                setLayout(layout);
     
                setWindowFlags(Qt::WindowTitleHint);
     
                etat = true;
            }
     
            void checkEtat()
            {
                if(!etat)
                    init(mqx,mqy);
            }
    };
    Ce que je voudrais réussir à faire c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    QPopup *t = new QPopup(200,200,5); // QPopup taille : 200 sur 200. Affiche 5 messages en même temps.
    t->Show(QString("Programme"), QString(e.text()),5000); // Message s'affichant pendant 5 secondes.
    Donc faire en sorte que ce soit assez personnalisable.

    Je ne sais pas comment faire pour que ce soit automatiquement placer les un au dessus des autres.
    Et faire en sorte d'afficher seulement x messages à la fois vu que je récupère les données que je dois afficher depuis une requête HTTP.

    Voilà, merci beaucoup !

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Bonjour,

    Citation Envoyé par austin.fla Voir le message
    Je ne sais pas comment faire pour que ce soit automatiquement placer les un au dessus des autres.
    D'après ton code tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QPopup *t = new QPopup(200,200,5); // QPopup taille : 200 sur 200. Affiche 5 messages en même temps.
    Donc, tu connais la taille des popups... Avec une petite formule de maths tu dois pouvoir trouver la position de chacun des éléments... En gros si tu positionnes (avec le coin haut gauche) la première popup en (x, y) les autres seront positionnée en (x, y - 200 * i)... non ?

    Et faire en sorte d'afficher seulement x messages à la fois vu que je récupère les données que je dois afficher depuis une requête HTTP.
    Je ne comprends pas vraiment ce que tu veux...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QPopup *t = new QPopup(200,200,5); // QPopup taille : 200 sur 200. Affiche 5 messages en même temps.
    cette fonction ne le fait pas déjà ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut
    Je vais voir pour la formule de maths.

    Non le x messages n'est pas encore fait j'ai juste montrer ceci : QPopup *t = new QPopup(200,200,5);

    Pour dire comment je voudrais faire mais j'ai pas réussit à le faire.

    Enfaite si tu veux pour éviter si par exemple j'ai 30 messages ça va pas le faire d'avoir les 30 messages comme ça à la suite on en verra surement que 6 ou 7 selon les tailles des écrans.

    Donc je voudrais les afficher par paquet par exemple 5.

    Donc ça ferait : affiche 5 messages pendant 5 secondes, les messages s'efface et la j'en n'affiche encore 5 etc...

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Ok.

    Dans ce cas tu vas avoir besoin d'une liste type FIFO partagée entre deux threads : un qui gère tes requêtes http qui va remplir la liste et un autre qui va se charger d'afficher tes popups avec ce qu'il y a dans la liste...
    Faut faire gaffe à tout ce qui est synchro / variables partagées...

    En ce qui concerne ta fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QPopup *t = new QPopup(200,200,5);
    Je verrais plutôt un constructeur qui prend la taille et la position de la popup dans l'écran, et une autre fonction statique qui va se charger d'en afficher plusieurs en même temps...

    ça pourrait faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class QPopup : public /* [A compléter] */ {
    public: 
       /* Constructeur d'une seule popup en fonction de sa taille et sa position */
       QPopup (const QRect& rect, QWidget* parent);
       /* [...] */
     
       /* Méthodique statique qui construit n popups en fonction de leurs tailles */
       static bool createNPopups (const int n, const QSize size, QWidget* parent);
    };

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut
    J'ai essayé de tout refaire comme je pensais mais impossible de le faire fonctionner... Il compile correctement mais lorsque que je lance l'action qui va déclencher le QPopup la le programme se quitte brusquement et entièrement !

    Voici le code :
    main.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
     
    #include "QPopup.h"
     
    int main(int argv, char** argc)
    {
        QApplication app(argv,argc);
     
        QPopup* pop = new QPopup(0,200,100); // parent widget 0 taille sur longeur 200, hauteur 100
        pop->Show("Test","TEST",5000,false,true);
        //Le premier paramètre titre a afficher dans la fenêtre
        //Le second paramètre texte a afficher dans la fenêtre
        //Le troisième paramètre Nombre de mili seconde que le popup reste afficher
        //Le quatrième paramètre true si on affiche instantanément le popup false si on l'anime
        //le cinquième paramètre true si on ferme instantanément le popup false si on l'anime
     
        return app.exec();
    }
    QPopup.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
    46
     
    #ifndef __QPOPUP_H__
    #define __QPOPUP_H__
    #include <windows.h>
    #include <QtGui/QtGui>
    #include <QtCore/QtCore>
    #include <iostream>
    #define SCREENX GetSystemMetrics(SM_CXSCREEN)
    #define SCREENY GetSystemMetrics(SM_CYSCREEN)
    #include <vector>
    using namespace std;
     
    class QPopup : public QWidget, public QThread
    {
        Q_OBJECT
        public:
     
     
            QPopup(QWidget* parent,const int x, const int y);
            ~QPopup();
     
        public slots:
            void setText(QString texte);
            void Show(QString title, QString texte,int time = 2000, bool _showed = false, bool _closed = false);
     
        private:
            void calcule();
            void run();
     
        private:
            QLabel *Label;
            int X;
            int Y;
            int pX;
            int pY;
            int Time;
            int pos;
            QTimer timer;
            static vector<int> QPopup_nbShowed;
            bool closed;
            bool showed;
            QGridLayout *gridLayout;
     
    };
     
    #endif
    QPopup.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
     
    #include "QPopup.h"
     
    vector<int> QPopup::QPopup_nbShowed;
     
    QPopup::QPopup(QWidget* parent,const int x, const int y) : QWidget(parent)
    {
                X = x;
                Y = y;
                Time = 2000;
                resize(x,y);
                gridLayout = new QGridLayout(this);
                Label = new QLabel(this);
                Label->setAlignment(Qt::AlignCenter);
                Label->setWordWrap(true);
                setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint);
                if(QPopup_nbShowed.size() == 0)
                {
                    for(int i = 0; i< 5; i++)
                        QPopup_nbShowed.push_back(0);
                }
                closed = false;
                showed = false;
                gridLayout->addWidget(Label, 0, 0, 1, 1);
    }
     
    QPopup::~QPopup()
    {
     
    }
     
    void QPopup::setText(QString texte)
    {
        Label->setText(texte);
    }
     
    void QPopup::Show(QString title, QString texte,int time, bool _showed , bool _closed )
    {
                setWindowTitle(title);
                setText(texte);
                Time = time;
                closed = _closed;
                showed = _showed;
                start();
     
     
    }
     
    void QPopup::calcule()
    {
                pX = SCREENX-(X+40);
                pY = SCREENY-(Y+40);
                move(pX,pY+Y);
     
    }
     
    void QPopup::run()
    {
                pos = 0;
                bool runner = true;
                while(runner)
                {
                    for(unsigned i = 0; i<QPopup_nbShowed.size();i++)
                    {
                        if(QPopup_nbShowed[i] == 0)
                        {
                            pos = i+1;
                            QPopup_nbShowed[i] = 1;
                            runner = false;
                            break;
                        }
                    }
                }
                calcule();
                show();
                int cx = x();
                if(!showed)
                {
                    for(int i = 0; i < ((pos-1)*40)+40+Y*pos; i++)
                    {
                        move(cx,SCREENY-i);
                    }
                }
                else
                {
                    move(cx,SCREENY-(((pos-1)*40)+40+Y*pos));
                }
     
                msleep(Time);
                if(!closed)
                {
                    int tmpy = y();
                    for(int i = 0; y() < SCREENY ; i++)
                    {
                        move(cx,tmpy+i);
                    }
                }
                close();
               QPopup_nbShowed[pos-1] = 0;
     
    }

    Voilà si quelqu'un voit le bug qui fait planter le programme et le fait quitter par la suite...

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Mmm...

    Je en sais pas trop où tu vas alors je vais essayer une autre approche...

    D'après ton premier message voici ce que tu sais faire :
    Citation Envoyé par austin.fla Voir le message
    Actuellement j'arrive à faire :
    - Affiche le QPopup en bas à droite comme MSN.
    - Dispose les QPopup l'un au dessus de l'autre manuellement.
    - Affichage des QPopup x temps.
    - Joue un son quand un QPopup s'affiche.
    - Taille du QPopup personnalisable.
    Donc pars de là... ça me parait pas mal.
    Ce qui te faut ça va plutôt être une seconde classe qui va gérer les QPopup, comme par exemple une classe QPopupManager. Cette classe va connaitre tous les popups (et pourra donc les positionner), et c'est aussi cette classe qui sera connecté à tes requêtes http...

    QPopupManager aura par exemple un attribut de type QList<QPopup> (Préfère les QList aux std::vector) qui contient tous les popups et les affichera ou les déplacera selon ta convenance...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut
    Le code que je viens de faire devrait marcher sans problème est être beaucoup plus performant que mon première non ?

    J'ai essayé de faire le mieux possible mais honnêtement pourquoi ça plante j'en sais rien la je suis sur que ça devrait marcher...

    Tu pourrais le tester chez toi et me dire si ça fonctionne ou non ?

    Ca me parait vraiment bizard...

    PS : j'ai encore modifié les fichiers pour que ce soit plus visible dans mon post juste au dessus du tiens.

  8. #8
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Citation Envoyé par austin.fla Voir le message
    Le code que je viens de faire devrait marcher sans problème est être beaucoup plus performant que mon première non ?
    Le problème n'est pas dans le code en tant que tel mais dans l'architecture de celui-ci... Il serait bon de séparer correctement tes classes : Tu devrais en avoir une qui s'occupe d'afficher un seul et unique QPopup et une autre qui gère plusieurs QPopup et leur dit où elles doivent s'afficher, quand elles doivent se fermer etc...

    J'ai essayé de faire le mieux possible mais honnêtement pourquoi ça plante j'en sais rien la je suis sur que ça devrait marcher...
    Tu pourrais le tester chez toi et me dire si ça fonctionne ou non ?
    Concernant ton code, deux soucis :
    1) Tu hérites de deux classes QObject, ce qui est a priori interdit par Qt... Voici le message à la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .\QPopup.h(43): Warning: Class QPopup inherits from two QObject subclasses QWidget and QThread. This is not supported!
    En fait, si l'héritage multiple est autorisé en C++, Qt le déconseille... Il semblerait que l'héritage multiple soit incompatible avec le mécanisme des signaux / slots et des filiations parents-enfants de Qt...
    Cependant, le code compile et comme tu n'as pas l'air d'utiliser les signaux / slots cela pourrait s'exécuter (je te conseille comme même de revoir ton code pour ne pas faire d'héritage multiple de QObject !)

    2) Le problème à l'exécution est un assert qui dit ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ASSERT failure in QCoreApplication::sendEvent: "Cannot send events to objects owned by a different thread. Current thread b8486c. Receiver " (of type 'QPopup') was created in thread 3d8528", file kernel\qcoreapplication.cpp, line 296
    Clairement tu essaies de manipuler un objet dans ton thread que ce dernier n'a pas créé. D'après la pile d'appel il s'agirait de la fonction "show ()" appelée dans la méthode "void QPopup::run ()"...

    De manière général, en Qt toute la GUI doit être manipulée depuis le thread principal...

    J'en reviens donc à ma remarque initiale, ton premier soucis n'est pas un problème de code, mais un problème d'organisation de code...
    Essaie d'organiser ton code, de bien découper tes classes selon leurs fonctionnalités et reviens vers nous, on te dira si ton organisation est bonne !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut
    Juste une petite chose avant et ensuite je vais rebosser dessus !

    Il compile que se soit en debug ou release, mais le problème c'est qu'il ne se lance même pas se quitte automatiquement lorsque que le programme compile en debug mais en release il fonctionne... C'est un peu bizarre non ?

    Tu aurais une idée pourquoi ?

    Merci pour tes conseilles !

  10. #10
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Oui c'est dù à l'assertion provoqué dans le code Qt comme je t'en parles plus haut.
    Une assertion est levé en Debug mais pas en Release. C'est un outils de debuggage au risque et péril des utilisateur en release...
    Mais normalement tu devrais avoir un avertissement de cet assert... Sur quel système travailles-tu ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut
    J'ai windows Xp familial, j'utilise Code::Block et Dev C++, pour compiler j'utilise le compileur Qt.

    Impossible de le faire fonctionner je n'arrive à rien au final ça plante toujours et juste ce code ça me prend 7mo de mémoire dans le gestionnaire des taches pour seulement 11 messages...

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Par défaut
    Pour afficher les messages dans le QPopup je suis obligé de stocker tous les messages XML quel que part, je peux pas les afficher directement sans les enregistrer ?

    Si je suis obligé des les enregistrer le mieux ce serait de l'enregistrer dans un fichier .xml à la racine du programme et après de tout traiter non ?

  13. #13
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Par défaut
    Citation Envoyé par austin.fla Voir le message
    Pour afficher les messages dans le QPopup je suis obligé de stocker tous les messages XML quel que part, je peux pas les afficher directement sans les enregistrer ?
    Non, c'est justement ce dont tu as parlé plus haut : tu ne sais pas combien de message tu peux recevoir... Donc tu dois les mettre dans une liste qui sera traitée ultérieurement.

    Si je suis obligé des les enregistrer le mieux ce serait de l'enregistrer dans un fichier .xml à la racine du programme et après de tout traiter non ?
    Non, je ne pense pas que ce soit le plus simple...
    Le mieux serait de manipuler 3 classes (ou groupes de classes).
    1) Une classe "http" qui gère la connexion réseau : quand elle reçoit un message elle émet un signal...
    2) Une classe "QPopupManager", qui va gérer les popups. Elle reçoit les signaux de http. C'est cette classe, sensiblement qui va contenir la liste des messages et qui va les afficher correctement dans des popups (dimension & position). Elle contient aussi un ou plusieurs timers qui vont calculer le temps d'affichage de chacun des popups...
    3) Une classe QPopup (comme tu as fais - ou à peu près) qui ne se charge que d'afficher un message dans une fenêtre. (Une classe pure GUI sans aucun traitement)

    Impossible de le faire fonctionner je n'arrive à rien au final ça plante toujours et juste ce code ça me prend 7mo de mémoire dans le gestionnaire des taches pour seulement 11 messages...
    Normal, c'est pas tes messages qui prennent de la place mais les dlls Qt...

    Concernant les "assert" je trouve juste étrange que windows ne t'affiche pas une fenêtre d'avertissement... A moins que les miennes ne soient affichées par MVS... Dans ce cas ce serait plutôt devC++ qui ne les affiche pas, peut-être une option à paramétrer ?

Discussions similaires

  1. [débutant][java2D]améliorer le design
    Par pingoui dans le forum 2D
    Réponses: 13
    Dernier message: 29/11/2004, 10h06
  2. [ Eclipse 3 vs 2.1.2] Quelles sont les améliorations ?
    Par geegee dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 26/05/2004, 16h55

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