很多人觉得系统自带的标题栏太丑了,想要自绘一个标题栏,去掉了系统自带的标题栏后,就需要自己实现窗口移动,下面的代码就是实现窗口移动。

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 = ); 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(,,,);
QMovie* mv = new QMovie("../a.PNG");
label->setMovie(mv);
//3秒后图片消失
QTimer::singleShot( *, label, SLOT(close()));
//图片移动
label->move(,); 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());
// 重新设置图片大小
*img = img->scaled(,,Qt::IgnoreAspectRatio);
#endif #if 0
QGraphicsBlurEffect *effect = new QGraphicsBlurEffect(this);
effect->setBlurRadius(); //模糊值,值越大越模糊 QGraphicsColorizeEffect *effect = new QGraphicsColorizeEffect(this);
effect->setColor(QColor(,,));//着色 QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect(this); //设定透明值
effect->setOpacity(0.5);//透明效果 /*
OuterGlowBitmapEffect(外发光)
DropShadowBitmapEffect(阴影)
EmbossBitmapEffect(浮雕)
BlurBitmapEffect(模糊)
BevelBitmapEffect(斜角)。
*/
#endif #if 1
QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect(this);
//设定阴影
effect->setOffset(,);
effect->setColor(QColor(,,));
effect->setBlurRadius();
#endif label->setGraphicsEffect(effect);//设置label效果
label->setPixmap(QPixmap::fromImage(*img));//把图片加载到label } //鼠标按下
void Widget::mousePressEvent(QMouseEvent *e)
{
if(e->pos().rx()> || e->pos().ry()>)
return ;
last = e->globalPos();
} //鼠标移动
void Widget::mouseMoveEvent(QMouseEvent *e)
{
if(e->pos().rx()> || e->pos().ry()>)
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()> || e->pos().ry()>)
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(,,,);
w.show(); return app.exec();
}

最新文章

  1. (转)Lock和synchronized比较详解
  2. 磁盘阵列(RAID)实例
  3. DisJSet:Wireless Network(POJ 2236)
  4. Scrum Meeting--Twelve(2015-11-3)
  5. jQuery.validate.js+API_cn
  6. Mvc4_传值取值应用
  7. 开机流程与主引导分区(MBR)——鸟哥私房菜
  8. localStorage的跨与实现方案
  9. [转]c# xml.Load() locking file on disk causing errors
  10. 无root权限安装python
  11. nginx 使用过程中一些基础性问题总结
  12. 『练手』003 Laura.SqlForever如何扩展 兼容更多数据库引擎
  13. MyDAL - is null &amp;&amp; is not null 条件 使用
  14. [转载] .NET 中可以有类似 JVM 的幻像引用吗?
  15. js相关用法
  16. Keepalived+LVS实现高可用负载均衡双主模式
  17. 【Spark笔记】Windows10 本地搭建单机版Spark开发环境
  18. 1503: [NOI2004]郁闷的出纳员 (SBT)
  19. 【原创】修改最大用户进程限制 &quot;ulimit -u&quot;
  20. windows下libcurl与zlib和ssl共同编译

热门文章

  1. SPOJ - FAVDICE 简单期望
  2. 安装配置flutter环境
  3. Servlet3.0的文件上传功能
  4. Coursera 机器学习 第7章 Support Vector Machines 学习笔记
  5. IE7不兼容slideDown()
  6. JS之this那些事
  7. html 跨过CSRF验证
  8. Java 的版本历史与特性
  9. numpy中一些常用函数的用法总结
  10. js简单实现表格排序