很多人覺得系統自帶的標題欄太丑了,想要自繪一個標題欄,去掉了系統自帶的標題欄后,就需要自己實現窗口移動,下面的代碼就是實現窗口移動。
widget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QPoint> #include <QMouseEvent> //引用鼠標類頭文件 class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); QPoint last; //鼠標按下 void mousePressEvent(QMouseEvent *e); //鼠標移動 void mouseMoveEvent(QMouseEvent *e); //鼠標釋放 void mouseReleaseEvent(QMouseEvent *e); signals: public slots: }; #endif // WIDGET_H
widget.cpp
#include "Widget.h" #include <QApplication> #include <QLabel> #include <QTimer> #include <QMovie> #include <QImage> #include <QGraphicsBlurEffect> //模糊效果 #include <QGraphicsColorizeEffect> //着色效果 #include <QGraphicsDropShadowEffect> //陰影效果 #include <QGraphicsOpacityEffect> //透明效果 Widget::Widget(QWidget *parent) : QWidget(parent) { QLabel* label = new QLabel(this); #if 0 label->setGeometry(0,0,200,200); QMovie* mv = new QMovie("../a.PNG"); label->setMovie(mv); //3秒后圖片消失 QTimer::singleShot( 3*1000, label, SLOT(close())); //圖片移動 label->move(200,200); mv->start(); #endif QImage *img = new QImage; img->load("../a.PNG"); //QImage 加載圖片 #if 0 //水平翻轉 *img = img->mirrored(true,false); //垂直翻轉 *img = img->mirrored(false,true); //旋轉60度角 QMatrix matrix; *img = img->transformed(matrix.rotate(60)); // 重新設置圖片大小 *img = img->scaled(1000,1000,Qt::IgnoreAspectRatio); #endif #if 0 QGraphicsBlurEffect *effect = new QGraphicsBlurEffect(this); effect->setBlurRadius(3); //模糊值,值越大越模糊 QGraphicsColorizeEffect *effect = new QGraphicsColorizeEffect(this); effect->setColor(QColor(0,200,0));//着色 QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect(this); //設定透明值 effect->setOpacity(0.5);//透明效果 /* OuterGlowBitmapEffect(外發光) DropShadowBitmapEffect(陰影) EmbossBitmapEffect(浮雕) BlurBitmapEffect(模糊) BevelBitmapEffect(斜角)。 */ #endif #if 1 QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect(this); //設定陰影 effect->setOffset(100,400); effect->setColor(QColor(20,20,20)); effect->setBlurRadius(500); #endif label->setGraphicsEffect(effect);//設置label效果 label->setPixmap(QPixmap::fromImage(*img));//把圖片加載到label } //鼠標按下 void Widget::mousePressEvent(QMouseEvent *e) { if(e->pos().rx()>1000 || e->pos().ry()>500) return ; last = e->globalPos(); } //鼠標移動 void Widget::mouseMoveEvent(QMouseEvent *e) { if(e->pos().rx()>1000 || e->pos().ry()>500) return ; int dx = e->globalX() - last.x(); int dy = e->globalY() - last.y(); last = e->globalPos(); move(x()+dx,y()+dy); } //鼠標釋放 void Widget::mouseReleaseEvent (QMouseEvent *e) { if(e->pos().rx()>1000 || e->pos().ry()>500) return ; int dx = e->globalX() - last.x(); int dy = e->globalY() - last.y(); move(x()+dx, y()+dy); } int main(int argc,char** argv) { QApplication app(argc,argv); Widget w; //去掉標題欄 w.setWindowFlags(Qt::FramelessWindowHint); //設置背景透明 //w.setAttribute(Qt::WA_TranslucentBackground, true); //固定大小 w.setGeometry(300,200,1000,500); w.show(); return app.exec(); }