这里的异形图形是指哪种?
这里所谓的异形图形是指非正方形或矩形这种规则的图形。 因为,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();
}
部分说明
那张效果图是可以拖动的,后面的背景是因为在桌面上。如果不在桌面可以看到是透明的。