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 !