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 :

[Qt4.5] windows translucide


Sujet :

Qt

  1. #1
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut [Qt4.5] windows translucide
    Salut,
    d'après la doc on peut faire des widget translucide
    http://qt.developpez.com/doc/4.5/qwi...lucent-windows
    Malgrés tous mes essaie, cela ne fonctionne pas... Voici un code simple qui, je pense aurais du marcher
    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
     
    #include <QtGui>
     
    class widget : public  QWidget
    {
        public:
    		widget(QWidget *parent = 0) : QWidget(parent)
            {
    			setAttribute(Qt::WA_TranslucentBackground,true);
            };
    		void paintEvent(QPaintEvent * event)
    		{
    			QPainter p(this);
    			p.fillRect(0,0,400,400,qRgba(200,180,250,128));
    		}
     
    };
     
    int main(int argc, char* argv[])
    {
        QApplication app(argc, argv);
        widget w; 
        w.show();
        return app.exec();
    }
    Je compile avec Qt 4.5 sous visual 2005.


    Si vous avez une idée? ou un truc que j'ai mal lu?

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    j'ai trouvé
    En faite y as deux problèmes :
    1- Qt::FramelessWindowHint : sous windows xp (vista??) il semble que l'on soit obligé de viré la décoration de la fenêtre. Ce qui me choque pas trop, vue que l'on doit faire la même chose avec un mask

    2- convertion QRgb => QColor : cette conversion ne prend pas en compte la valeur alpha
    et bien sure c'est précisé dans la doc
    http://qt.developpez.com/doc/4.4/qcolor/#qcolor-3
    Il faut percuté les conversions implicite mise en jeu entre QRgb et QBrush:
    QRgb => QColor => QBrush
    Donc plus d'alpha.

    Voici un exemple plus fun pour voir ce que l'on peut faire
    dsl pour les couleurs utilisées
    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
     
    #include <QtGui>
     
    class Widget : public QWidget
    {
        QPoint p;
    public:
        Widget()
        //enleve la decoration windows
        :QWidget(0,Qt::FramelessWindowHint)
        {
            //windows avec fond translucide
            setAttribute(Qt::WA_TranslucentBackground, true);
            resize(400,400);
     
            //bouton pour fermer l'ensemble
            QPushButton *b = new QPushButton("close",this);
            connect(b,SIGNAL(clicked()),this,SLOT(close()));
        }
    protected:
        void paintEvent(QPaintEvent * )
    		{
    			QPainter p(this);
     
                //utilisation un gradient linéaire entre deux coin de la fenetre
                QLinearGradient grad(0,0,rect().width(),rect().height());
                {
                     //Gradienstops pour varier l'apha et la couleur du gradient
                    QGradientStops gs;
                    gs <<QGradientStop(0.,QColor(0,0,0,0))
                        <<QGradientStop(.5,QColor(128,0,128,128))
                        <<QGradientStop(1.,QColor(255,128,128,255));
     
                    grad.setStops (gs);
                }
                //remplis la widget
    			p.fillRect(0,0,rect().width(),rect().height(),grad);
     
     
    		}
     
        void mousePressEvent   ( QMouseEvent * mouseEvent )
        {
            //sauvegarde du point dans le repère widget lors du click gauche
            if(mouseEvent->buttons() == Qt::LeftButton)  p = mouseEvent->pos();
     
        }
        void mouseMoveEvent  ( QMouseEvent * mouseEvent )
            {
                if(mouseEvent->buttons() == Qt::LeftButton) // Si le clic gauche est enfoncé
                {
                    //bouge la widget a la position :
                    // position souris dans le repère global - position du click dans le repère widget
                    move( mouseEvent->globalPos() - p);
                }
            }
    };
     
    int main(int argc, char **argv)
    {
        QApplication app(argc, argv);
        Widget widget;
        widget.show();
        return app.exec();
    }
    [edit]
    si vous voulez ce que l'on peut faire grâce à cela.
    http://labs.trolltech.com/blogs/2008...idgets-on-x11/

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/12/2008, 02h01
  2. Installer Qt4 sous Windows
    Par gege2061 dans le forum Qt
    Réponses: 5
    Dernier message: 15/12/2008, 15h42
  3. Réponses: 1
    Dernier message: 28/11/2005, 23h20

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