Qt不规则窗体的实现
文章转自王牌软件
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)
只回答业务咨询
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)
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 |
//shapewidget.h /* *@date 2012-11-17 */ #ifndef __SHAPE_WIDGET_H #define __SHAPE_WIDGET_H #include <QWidget> #include <QMouseEvent> #include <QPaintEvent> #include <QPoint> class ShapeWidget:public QWidget { Q_OBJECT public: ShapeWidget(QWidget *parent = 0); ~ShapeWidget(); protected: void mousePressEvent(QMouseEvent *); void mouseMoveEvent(QMouseEvent *); //重写QWidget::paintEvent(QPaintEvent *() 函数 窗体重绘 void paintEvent(QPaintEvent *); private: QPoint dragPosition; }; #endif //shapewidget.cpp #include "shapewidget.h" #include <QPainter> #include <QPixmap> #include <QBitmap> #include <QDebug> ShapeWidget::ShapeWidget(QWidget *parent):QWidget(parent,Qt::FramelessWindowHint) { QPixmap pix; pix.load("./images/linux.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither); //第三个参数为读取图片的方式 //窗体的大小和图片大小一样 resize(pix.size()); /*实现不规则窗体的关键,setMask()的作用是为调用它的控件增加一个遮罩,遮住所选区域以外的部分使之看起来是透明的。他的参数可为一个QBitmap对象(如本实例)或一个QRegion对象,此处调用QPixmap的mask函数获得图片自身的遮挡,为一个QBitmap对象。实例中使用的是png格式的图片,他的透明部分实际上就是一个遮罩*/ setMask(pix.mask()); } ShapeWidget::~ShapeWidget() { } void ShapeWidget::mousePressEvent(QMouseEvent *event) { if(event->button() == Qt::LeftButton) { dragPosition = event->globalPos() - frameGeometry().topLeft(); event->accept(); } if(event->button() == Qt::RightButton) { close(); } } void ShapeWidget::mouseMoveEvent(QMouseEvent *event) { if(event->buttons() & Qt::LeftButton) { move(event->globalPos() - dragPosition); event->accept(); } } void ShapeWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.drawPixmap(0,0,QPixmap("./images/linux.png")); } //main.cpp #include <QApplication> #include "shapewidget.h" int main(int argc,char **argv) { QApplication app(argc,argv); ShapeWidget *shapew = new ShapeWidget; shapew->show(); return app.exec(); } |
学习日记,兼职软件设计,软件修改,毕业设计。
本文出自 学习日记,转载时请注明出处及相应链接。
本文永久链接: https://www.softwareace.cn/?p=339