您的位置:首页 > 编程语言 > Qt开发

QT异形图形的开发

2016-03-15 00:06 357 查看
这里的异形图形是指哪种

原图

处理后效果

原代码

部分说明

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

这里所谓的异形图形是指非正方形或矩形这种规则的图形。 因为,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();
}


部分说明

那张效果图是可以拖动的,后面的背景是因为在桌面上。如果不在桌面可以看到是透明的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: