程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 一個無邊框的Qt實例

一個無邊框的Qt實例

編輯:關於C語言

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved