QT学习笔记14不规则窗体


常见的窗体是各种方形的对话框,但有时候也需要非方形的窗体,如圆形,椭圆甚至是不规则形状的对话框。

实现步骤:

  • 新建一个项目,比如项目名称叫做"ShapeWidget",给此项目添加一个类"ShapeWidget",基类选择"QWidget"。
  • 为了使该不规则窗体可以通过鼠标随意拖拽,在类中重定义鼠标事件:mousePressEvent()、mouseMoveEvent()、以及绘制函数paintEvent()
  • "ShapeWidget"的构造函数部分是实现该不规则窗体的关键,添加具体代码如下:

//新建一个Pixmap对象

QPixmap pixmap;

//加载图片

pixmap.load(":/new/prefix1/image/sunny.png");

//固定窗口大小,将窗口大小设置为图片大小

setFixedSize( pixmap.width(), pixmap.height() );

//给窗口去掉边框,设置窗口的flags

setWindowFlags(Qt::FramelessWindowHint | windowFlags() );

//设置透明背景

setAttribute(Qt::WA_TranslucentBackground);

  • 重新实现鼠标事件和绘制函数

void ShareWidget::mousePressEvent(QMouseEvent *ev)

{

if(ev->button() == Qt::LeftButton)

{

// 求出窗口移动之前的坐标

m_dragPoint = ev->globalPos()-frameGeometry().topLeft();

}

if(ev->button() == Qt::RightButton)

{

// 鼠标右键关闭窗口

close();

}

}

 

void ShareWidget::mouseMoveEvent(QMouseEvent *ev)

{

if(ev->buttons() & Qt::LeftButton)

{

// 如果是鼠标左键拖动, 移动窗口

move(ev->globalPos() - m_dragPoint);

}

}

 

void ShareWidget::paintEvent(QPaintEvent *ev)

{

Q_UNUSED(ev)

QPainter painter(this);

// 重新绘制图片

painter.drawPixmap(0, 0, QPixmap(":/ButterFly"));

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值