天天看点

Qt之对话框设计——不规则窗体

shapewidget.h

#ifndef SHAPEWIDGET_H  

#define SHAPEWIDGET_H  

#include <QtGui>  

class QPoint;  

class ShapeWidget : public QWidget  

{  

    Q_OBJECT  

public:  

    ShapeWidget(QWidget *parent = 0, Qt::WFlags flags = 0);  

    ~ShapeWidget();  

protected:  

    void mousePressEvent(QMouseEvent *);  

    void mouseMoveEvent(QMouseEvent *);  

private:  

    QPoint dragPosition;  

};  

#endif // SHAPEWIDGET_H  

shapewidget.cpp

#include "shapewidget.h"  

#include <QPixmap>  

#include <QBitmap>  

ShapeWidget::ShapeWidget(QWidget *parent, Qt::WFlags flags)  

    : QWidget(parent, flags)  

    QPixmap pix;    //实例化一个位图对象  

    pix.load("images/tux.png",  

        0,  

        Qt::AvoidDither| Qt::ThresholdDither | Qt::ThresholdAlphaDither);   //加载掩码图像  

    resize(pix.size());     //设置图像的大小  

    setMask(pix.mask());    //抠除图像的白色区域实现不规则窗体  

    QPalette plt;   //实例化调色板  

    plt.setBrush(QPalette::Window, QBrush(pix));    //将调色板的画刷设置为掩码位图,在不规则窗体上显示出掩码位图  

    setPalette(plt);    //按调色板信息设置窗体  

}  

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);  

shapewidget.cpp中第30行的frameGeometry().topLeft()仍然表示整个窗体的左上角,而不是所见不规则窗体的左上角。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

本文转自韩兆新博客博客园博客,原文链接:http://www.cnblogs.com/hanzhaoxin/archive/2012/11/22/2783373.html,如需转载请自行联系原作者

继续阅读