Qt学习——不规则窗体形状 .

时间:2020-12-20 20:34:09
 

窗体可以设置为图片的形状

如下:

Qt学习——不规则窗体形状 .

其实就是将窗体设置一个遮罩,此遮罩设为图片的遮罩即可

这里还涉及到一些Event的函数重载,具体看代码。

头文件:

  1. #include <QtGui/QWidget>   
  2. #include <QLabel>   
  3. #include <QPixmap>   
  4. class Widget : public QWidget  
  5. {  
  6.     Q_OBJECT  
  7.   
  8. public:  
  9.     Widget(QWidget *parent = 0);  
  10.     ~Widget();  
  11. protected:  
  12.     void mousePressEvent(QMouseEvent *);  
  13.     void mouseMoveEvent(QMouseEvent *);  
  14.     void paintEvent(QPaintEvent *);  
  15. private slots:  
  16.     void showtime();  
  17. private:  
  18.     QPoint dragPosition;  
  19.     QLabel *l;  
  20.         QPixmap pix;  
  21. };  

源文件:

  1. #include "widget.h"   
  2. #include <QMouseEvent>   
  3. #include <QPainter>   
  4. #include <QBitmap>   
  5. #include <QGridLayout>   
  6. #include <QTimer>   
  7. #include <QTime>   
  8. Widget::Widget(QWidget *parent)  
  9.     : QWidget(parent)  
  10. {  
  11.     setWindowFlags(Qt::FramelessWindowHint);  
  12.     QPalette p=palette();  
  13.     p.setColor(QPalette::WindowText,Qt::green);  
  14.     setPalette(p);  
  15.   
  16.     l=new QLabel;  
  17.     QTime time=QTime::currentTime();  
  18.     QGridLayout *mainLayout=new QGridLayout(this);  
  19.     mainLayout->addWidget(l,0,0,Qt::AlignHCenter);  
  20.   
  21.     pix.load("qq.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);  
  22.     resize(pix.size());  
  23.     setMask(QBitmap(pix.mask()));  
  24.   
  25.     QTimer *timer=new QTimer;  
  26.     connect(timer,SIGNAL(timeout()),this,SLOT(showtime()));  
  27.     timer->start(10);  
  28. }  
  29.   
  30. Widget::~Widget()  
  31. {  
  32.   
  33. }  
  34.   
  35. void Widget::showtime()  
  36. {  
  37.     QTime time=QTime::currentTime();  
  38.     l->setText(time.toString("A hh:mm:ss"));  
  39. }  
  40.   
  41. void Widget::mousePressEvent(QMouseEvent *event)  
  42. {  
  43.     if(event->button()==Qt::LeftButton)  
  44.     {  
  45.         dragPosition=event->globalPos()-frameGeometry().topLeft();  
  46.         event->accept();  
  47.     }  
  48.     else if(event->button()==Qt::RightButton)  
  49.     {  
  50.         close();  
  51.     }  
  52. }  
  53.   
  54. void Widget::mouseMoveEvent(QMouseEvent *event)  
  55. {  
  56.     move(event->globalPos()-dragPosition);  
  57.     event->accept();  
  58. }  
  59.   
  60. void Widget::paintEvent(QPaintEvent *event)  
  61. {  
  62.     QPainter painter(this);  
  63.     painter.drawPixmap(0,0,QPixmap("qq.png"));  
  64. }  

下面三个函数是响应各个事件的

前面两个为了实现可拖动,时钟程序也用了

后面那个为了显示图片

Qt学习——不规则窗体形状 .