實現一個以圖片邊框為窗口邊框的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();
}
實現一個以圖片邊框為窗口邊框的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();
}