QT异形图形的开发

本文介绍如何使用QT创建非矩形的异形窗口,并通过一个简单的示例展示了如何设置窗口的透明度、加载背景图片及实现鼠标拖动等功能。

这里的异形图形是指哪种?

这里所谓的异形图形是指非正方形或矩形这种规则的图形。 因为,QT普通的一个Dialog或widget生成的一个窗口就是一个矩形或正方形,如果要显示不规则图形,该怎么处理呢?下面是一个简单的小实例。


原图

这里写图片描述


处理后效果

这里写图片描述


原代码


.h文件

#ifndef YIXINGDIALOG_H
#define YIXINGDIALOG_H

#include <QWidget>
#include <QToolButton>

class YiXingDialog : public QWidget
{
    Q_OBJECT
public:
    explicit YiXingDialog(QWidget *parent = 0);
    void paintEvent(QPaintEvent* event);

protected:
    virtual void mouseMoveEvent(QMouseEvent *);

signals:

public slots:


private:
    QPixmap m_pixmap;
};

#endif // YIXINGDIALOG_H

.cpp 文件

#include "yixingdialog.h"
#include <QBitmap>
#include <QPalette>
#include <QPaintEvent>
#include <QDebug>
#include <QtMath>

YiXingDialog::YiXingDialog(QWidget *parent) :
    QWidget(parent, Qt::FramelessWindowHint)
{
    this->setWindowOpacity(0.9); // 这里设置整体的透明度。

    m_pixmap.load(":/images/background.png");
    m_pixmap = m_pixmap.scaled(size());
    setAutoFillBackground(true);
    setMask(m_pixmap.mask());  //这里设置遮罩层,如果不设置原图透明部份为黑色。
}

void YiXingDialog::paintEvent(QPaintEvent *event)
{
    QPalette bgPalette = this->palette();
    bgPalette.setBrush(QPalette::Background, m_pixmap);
    this->setPalette(bgPalette);
    //画图操作
}

void YiXingDialog::mouseMoveEvent(QMouseEvent *event)
{
    int moveX = cursor().pos().x();
    int moveY = cursor().pos().y();
    move(moveX, moveY);
    //这里监控鼠标的移动过程。如果拖动图片时,图片进行移动。
}

main 文件

#include <QApplication>
#include "yixingdialog.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    YiXingDialog yixing;
    yixing.show();

    return a.exec();
}

部分说明

那张效果图是可以拖动的,后面的背景是因为在桌面上。如果不在桌面可以看到是透明的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小K小Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值