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();
} |
Partager