设为首页 加入收藏

TOP

一个无边框的Qt实例(一)
2014-11-23 22:19:21 来源: 作者: 【 】 浏览:4
Tags:一个 边框 实例

实现一个以图片边框为窗口边框的Qt程序,可以鼠标左键拖动,点击右键可以推出程序。

本程序一共三个文件,分别为shapewidget.h,shapewidget.cpp,main.cpp

自定义头文件:shapewidget.h

#ifndef SHAPEWIDGET_H
#define SHAPEWIDGET_H

#include

class QPoint; //定义一个Qpoint类

class ShapeWidget : public QWidget //ShaoeWidget继承了QWidget
{
Q_OBJECT
public:
ShapeWidget(QWidget *parent=0); //创建一个空内容的构造函数

protected:
void mousePressEvent(QMouseEvent *); //自定义一个鼠标点击事件函数
void mouseMoveEvent(QMouseEvent *); //自定义一个鼠标拖动事件函数
void paintEvent(QPaintEvent *); //自定义一个刷屏事件函数

private:
QPoint dragPosition; //定义一个QPoint的成员变量

};

#endif

实现文件:shapewidget.cpp

#include "shapewidget.h"

ShapeWidget::ShapeWidget(QWidget *parent) //外部重写构造函数
: QWidget(parent,Qt::FramelessWindowHint) //初始化参数类型
{
QPixmap pix; //设置一个QPixmap的对象。
pix.load(":/images/Watermelon.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);
resize(pix.size()); //设置窗口的尺寸为图片的尺寸
setMask(pix.mask()); //先通过pix的方法获得图片的过滤掉透明的部分得到的图片,作为shapeWidget的不规则边框。
}

void ShapeWidget::mousePressEvent(QMouseEvent * event)
{
if (event->button() == Qt::LeftButton) //点击左边鼠标
{
dragPosition = event->globalPos() - frameGeometry().topLeft();
//globalPos()获取根窗口的相对路径,frameGeometry().topLeft()获取主窗口左上角的位置
event->accept(); //鼠标事件被系统接收
}
if (event->button() == Qt::RightButton)
{
close();
}
}

void ShapeWidget::mouseMoveEvent(QMouseEvent * event)
{
if (event->buttons() == Qt::LeftButton) //当满足鼠标左键被点击时。
{
move(event->globalPos() - dragPosition);//移动窗口
event->accept();
}
}

void ShapeWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);//创建一个QPainter对象
painter.drawPixmap(0,0,QPixmap(":/images/Watermelon.png"));//绘制图片到窗口
/*
QPixmap(":/images/Watermelon.png")如果改为QPixmap(),则只能看到绘制出的框架,看不到图片颜色,也就是看不到图片。
*/
}


主函数:main.cpp

#include
#include "shapewidget.h"

int
main(int argc, char * argv[])
{
QApplication app(argc,argv);
ShapeWidget shape;
shape.show();
return app.exec();
}

实现一个以图片边框为窗口边框的Qt程序,可以鼠标左键拖动,点击右键可以推出程序。

本程序一共三个文件,分别为shapewidget.h,shapewidget.cpp,main.cpp

自定义头文件:shapewidget.h

#ifndef SHAPEWIDGET_H
#define SHAPEWIDGET_H

#include

class QPoint; //定义一个Qpoint类

class ShapeWidget : public QWidget //ShaoeWidget继承了QWidget
{
Q_OBJECT
public:
ShapeWidget(QWidget *parent=0); //创建一个空内容的构造函数

protected:
void mousePressEvent(QMouseEvent *); //自定义一个鼠标点击事件函数
void mouseMoveEvent(QMouseEvent *); //自定义一个鼠标拖动事件函数
void paintEvent(QPaintEvent *); //自定义一个刷屏事件函数

private:
QPoint dragPosition; //定义一个QPoint的成员变量

};

#endif

实现文件:shapewidget.cpp

#include "shapewidget.h"

ShapeWidget::ShapeWidget(QWidget *parent) //外部重写构造函数
: QWidget(parent,Qt::FramelessWindowHint) //初始化参数类型
{
QPixmap pix; //设置一个QPixmap的对象。
pix.load(":/images/Watermelon.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);
resize(pix.size()); //设置窗口的尺寸为图片的尺寸
setMask(pix.mask()); //先通过pix的方法获得图片的过滤掉透明的部分得到的图片,作为shapeWidget的不规则边框。
}

void ShapeWidget::mousePressEvent(QMouseEvent * event)
{
if (event->button() == Qt::LeftButton) //点击左边鼠

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇新手指南-序列化篇之三 下一篇Vczh Library++3.0之山寨mscorlib..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: