• 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);
    		event->accept();
    	}
    }
    
    
    

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

  • 相关阅读:
    彻底理解数字图像处理中的卷积-以Sobel算子为例
    CSK & KCF(tracking)
    内积、标量积、点积、点乘
    C++拷贝构造函数详解
    从RGB色转为灰度色算法
    混合高斯背景建模原理及实现
    单高斯背景建模
    计算机视觉目标跟踪的算法分类
    SVM:从理论到OpenCV实践
    HOG特征(Histogram of Gradient)学习总结
  • 原文地址:https://www.cnblogs.com/hanzhaoxin/p/2783373.html
Copyright © 2020-2023  润新知