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

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();
}

Qt 窗口移动实现的更多相关文章

  1. CentOS下Qt窗口透明效果失效,成黑色背景的问题

    一.问题 Linux系统下Qt窗口的透明效果成了黑色,但同样的代码在windows机子上有透明效果,主要是修改系统的配置,仅在centos6.3及其以上版本实验过.其他系统可以相应配置. 二.问题运行 ...

  2. 深度探索QT窗口系统(五篇)

    窗口作为界面编程中最重要的部分,没有窗口就没有界面,是窗口让我们摆脱了DOS时代,按钮是一个窗口,文本框是一个窗口,标签页是一个窗口,...一个窗口可以由多个窗口组成,每天我们都在与窗口打交道,当你打 ...

  3. 调色板类QPalette——包含了Qt窗口不见的颜色组(collor group),和Windows右键属性外观非常类似

    QPalette类包含了Qt窗口不见的颜色组(collor group); 1.Active组,该组的颜色用户当前活动的(active)窗口,即具有键盘或鼠标焦点的窗口; 2.Inactive组,该组 ...

  4. QT窗口置顶/真透明/背景模糊/非矩形/跳过任务栏分页器/无边框/无焦点点击/焦点穿透

    qt 窗口置顶/真透明/背景模糊/非矩形/跳过任务栏分页器/无边框/无焦点点击/焦点穿透 窗口置顶qt 里是 setWindowFlags(Qt::WindowStaysOnTopHint)kde 里 ...

  5. Qt窗口操作函数(最大化,全屏,隐藏最大化,最小化)

    Qt窗口中的一些小技术总结 //Qt主窗口没有最小化,最大化按钮且最大化显示  int main(int argc, char *argv[]) { QApplication a(argc, argv ...

  6. Qt窗口定制

    qt中的QWidget窗口支持窗体绘制,但是不支持窗口标题栏绘制,想要美观的界面,还需要自己去定制,下面我就介绍一种定制窗体的方法 一个窗口无非就3部分,标题栏.窗体和状态栏,接下来我定制的窗口没有状 ...

  7. 初识Qt窗口界面

    1.新建一个新的Qt Gui应用,项目名称随意,例如MyMainWindow,基类选择QMainWindow,类名为MainWindow. 2.项目建立后,双击mainwindow.ui文件,在界面的 ...

  8. qt 窗口控件自动调整大小

    /******************************************************************** * qt 窗口控件自动调整大小 * * 在写gui的时候,希 ...

  9. Qt窗口及控件-窗口Close()自动释放

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt-窗口Close()后自动释放空间     本文地址:http://techieliang ...

  10. QWidget居中显示(qt窗口坐标原点是在”左上角”的,有图)

    转载请说明出处, 并附上原文链接http://blog.csdn.net/qq907482638/article/details/72189014. 问题描述 在Qt学习过程中,在让QDialog居中 ...

随机推荐

  1. POJ - 1733 离散化 并查集

    题意:求问数列区间奇偶信息正确与否 和上一题一样(甚至弱化),加个离散就ok啦 #include<iostream> #include<algorithm> #include& ...

  2. [转] Kubernetes集群安装文档-v1.6版本

    [From] https://www.kubernetes.org.cn/1870.html http://jimmysong.io/kubernetes-handbook

  3. 计算两个日期相差的天数 js php日期 减一年

    计算两个日期相差的天数 //sDate1和sDate2是yyyy-MM-dd格式 function dateDiff(sDate1, sDate2) { var aDate, oDate1, oDat ...

  4. PIE SDK过滤控制

    1.  功能简介 栅格数据前置过滤是在渲染之前对内存中的数据根据特定的规则进行处理,然后再进行数据渲染.本示例以定标为例进行示例代码编写. 定标(校准)是将遥感器所得的测量值变换为绝对亮度或变换为与地 ...

  5. 让android系统中任意一个view变成进度条

    1.效果 2.进度条背景drawable文件 结束后可以恢复原背景. <?xml version="1.0" encoding="utf-8"?> ...

  6. PDFJs 在线预览插件

    0.A.到官网 https://mozilla.github.io/pdf.js/getting_started/#download 下载最新版本B 部署到IIS 中访问 pdf.js/web/vie ...

  7. linux 运维基础之http协议详解

    引言 这尼玛博客还得自己在这里写,难受一匹本来排版好的...每次都这样嗨....本内容属于借鉴资源,侵权删! HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系 ...

  8. 日志收集之nxlog

    一,软件介绍 nxlog 是用 C 语言写的一个开源日志收集处理软件,它是一个模块化.多线程.高性能的日志管理解决方案,支持多平台.可以处理来自许多不同来源的大量事件日志.支持的日志处理类型包括重写, ...

  9. (转)DB2中的一些函数

    DB2中的一些函数 原文:https://www.cnblogs.com/ShaYeBlog/archive/2012/08/27/2658025.html 最近用DB2,数据库之间的差异还是很大的, ...

  10. spring依赖版本约束

    <dependencyManagement> <dependencies> <dependency> <groupId>org.springframew ...