【转】QT实现不规则窗体

本文介绍了如何利用Qt技术实现不规则窗体设计,并通过调用WebService实现场景应用,如天气预报和翻译功能。通过设置PNG格式的遮掩图像,实现窗体形状的定制化,同时展示了Qt在实际应用中的灵活性和强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看到好文章,收藏一下:

看到网上有很多不规则窗体的实现,效果很酷.于是使用QT也实现了一个,QT的不规则窗体实现非常简单,只需要设置一个mask(遮掩)图片,这个图片的格式可以使用png或bmp格式,我使用了png格式,默认窗体是矩形的,使用png图像,将需要隔离在窗体之外的区域的像素设置为白色或透明色,其他颜色的区域对应显示出来的窗体.关键代码就几行.

#ifndef IRREGULARFORM_H
#define IRREGULARFORM_H

#include <QWidget>
#include "ui_irregularform.h"
#include <QBitmap>
#include <QPixmap>
#include <QMouseEvent>
#include <QRect>

class IrregularForm : public QWidget
{
 Q_OBJECT

public:
 IrregularForm(QWidget *parent = 0);
 ~IrregularForm();
protected:
 void  mouseMoveEvent(QMouseEvent *event);
 void  mousePressEvent(QMouseEvent *event); 
 void  mouseReleaseEvent(QMouseEvent *event); 
private:
 Ui::IrregularFormClass ui;
 QPoint mouseMovePos;
 
};

#endif // IRREGULARFORM_H

#include "irregularform.h"

IrregularForm::IrregularForm(QWidget *parent)
 : QWidget(parent)
{
 setWindowFlags(Qt::FramelessWindowHint);
 QPixmap mask(":/IrregularForm/Resources/mask.png");//加载掩码图像
 setMask(QBitmap(mask.mask())); //设置窗体的掩码图像,抠除图像的白色区域实现不规则窗体
 QPalette p;//设置调色板
 p.setBrush(QPalette::Window, QBrush(mask));//将调色板的画刷设置为掩码位图,在不规则窗体上显示出掩码位图
 setPalette(p);
 mouseMovePos = QPoint(0, 0);
}

IrregularForm::~IrregularForm()
{

}

void  IrregularForm::mouseMoveEvent(QMouseEvent *event)//鼠标按下并移动则移动不规则窗体
{
 if(mouseMovePos != QPoint(0, 0))
 {
  move(geometry().x() + event->globalPos().x() - mouseMovePos.x(), geometry().y() + event->globalPos().y() - mouseMovePos.y());
  mouseMovePos = event->globalPos();
 }
}

void  IrregularForm::mousePressEvent(QMouseEvent *event)
{
 mouseMovePos = event->globalPos();
}

void  IrregularForm::mouseReleaseEvent(QMouseEvent *event)
{
 mouseMovePos = QPoint(0, 0);
}
 

 

效果图

源码下载使用Qt实现的不规则窗体,实现了按任意png图形确定窗体形状.以及调用WebService实现天气预报和翻译功能

转载:http://download.youkuaiyun.com/download/henreash/4393914

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值