一个无边框的Qt实例

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

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

自定义头文件:shapewidget.h

#ifndef SHAPEWIDGET_H
#define SHAPEWIDGET_H

#include <QtGui>

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 <QApplication>
#include "shapewidget.h"

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

原地址:http://linhui.568.blog.163.com/blog/static/962652682010789339688/

来自: http://hi.baidu.com/sd%B2%CB/blog/item/f5de253e6294dee03d6d975e.html

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

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

自定义头文件:shapewidget.h

#ifndef SHAPEWIDGET_H
#define SHAPEWIDGET_H

#include <QtGui>

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 <QApplication>
#include "shapewidget.h"

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

原地址:http://linhui.568.blog.163.com/blog/static/962652682010789339688/

posted on 2011-06-26 11:03 Smart Pointer 阅读(2671) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

导航

统计

常用链接

留言簿

随笔档案

收藏夹

搜索

最新评论

阅读排行榜

评论排行榜