Qt 窗口移动实现
很多人觉得系统自带的标题栏太丑了,想要自绘一个标题栏,去掉了系统自带的标题栏后,就需要自己实现窗口移动,下面的代码就是实现窗口移动。
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 窗口移动实现的更多相关文章
- CentOS下Qt窗口透明效果失效,成黑色背景的问题
一.问题 Linux系统下Qt窗口的透明效果成了黑色,但同样的代码在windows机子上有透明效果,主要是修改系统的配置,仅在centos6.3及其以上版本实验过.其他系统可以相应配置. 二.问题运行 ...
- 深度探索QT窗口系统(五篇)
窗口作为界面编程中最重要的部分,没有窗口就没有界面,是窗口让我们摆脱了DOS时代,按钮是一个窗口,文本框是一个窗口,标签页是一个窗口,...一个窗口可以由多个窗口组成,每天我们都在与窗口打交道,当你打 ...
- 调色板类QPalette——包含了Qt窗口不见的颜色组(collor group),和Windows右键属性外观非常类似
QPalette类包含了Qt窗口不见的颜色组(collor group); 1.Active组,该组的颜色用户当前活动的(active)窗口,即具有键盘或鼠标焦点的窗口; 2.Inactive组,该组 ...
- QT窗口置顶/真透明/背景模糊/非矩形/跳过任务栏分页器/无边框/无焦点点击/焦点穿透
qt 窗口置顶/真透明/背景模糊/非矩形/跳过任务栏分页器/无边框/无焦点点击/焦点穿透 窗口置顶qt 里是 setWindowFlags(Qt::WindowStaysOnTopHint)kde 里 ...
- Qt窗口操作函数(最大化,全屏,隐藏最大化,最小化)
Qt窗口中的一些小技术总结 //Qt主窗口没有最小化,最大化按钮且最大化显示 int main(int argc, char *argv[]) { QApplication a(argc, argv ...
- Qt窗口定制
qt中的QWidget窗口支持窗体绘制,但是不支持窗口标题栏绘制,想要美观的界面,还需要自己去定制,下面我就介绍一种定制窗体的方法 一个窗口无非就3部分,标题栏.窗体和状态栏,接下来我定制的窗口没有状 ...
- 初识Qt窗口界面
1.新建一个新的Qt Gui应用,项目名称随意,例如MyMainWindow,基类选择QMainWindow,类名为MainWindow. 2.项目建立后,双击mainwindow.ui文件,在界面的 ...
- qt 窗口控件自动调整大小
/******************************************************************** * qt 窗口控件自动调整大小 * * 在写gui的时候,希 ...
- Qt窗口及控件-窗口Close()自动释放
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt-窗口Close()后自动释放空间 本文地址:http://techieliang ...
- QWidget居中显示(qt窗口坐标原点是在”左上角”的,有图)
转载请说明出处, 并附上原文链接http://blog.csdn.net/qq907482638/article/details/72189014. 问题描述 在Qt学习过程中,在让QDialog居中 ...
随机推荐
- 正确优雅地解决用户退出——JSP及Struts解决方案
摘要 在一个有密码保护的Web应用中,正确处理用户退出过程并不仅仅只需调用HttpSession的invalidate()方法.现在大部分浏览器上都有后退和前进按钮,允许用户后退或前进到一 ...
- TCP协议:三次握手过程详解
本文通过图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图1所示,给出了TCP通信过程的示意图. 上图主要包括三部分:建立连接.传输数 ...
- python 计数器Counter
from collections import Counter colours=( ('Yasoob','Yellow',1), ('Ali','Blue',2), ('Arham','Green', ...
- 常用Redis命令
在 Windows 下配置 Redis 集群 在 Windows 下配置多个 Redis(简化配置) MicrosoftArchive/redis 官方Redis集群搭建文档 Redis命令 Cent ...
- nyoj 1208——水题系列——————【dp】
水题系列 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给你一个有向图,每条边都有一定的权值,现在让你从图中的任意一点出发,每次走的边的权值必须必上一次的权 ...
- 吴恩达《Machine Learning Yearning》总结(11-20章)
11.何时修改开发集.测试集和度量指标 开展一个新项目,尽快选好开发集和测试集:例子,根据度量指标A分类器排在B分类器前面,但是团队认为B分类器在实际产品上优于A分类器,这时就需要考虑修改开发集和测试 ...
- Spring mvc框架下使用kaptcha生成验证码
1.下载jar包并导入. kaptcha-2.3.2.jar 2.spring 配置文件 applicationContext.xml. <bean id="captchaProduc ...
- 当Activity出现Exception时是如何处理的?
1.ActivityThread 2.PerformStop 在这里会调用mWindow.closeAllPanels(),从而关闭OptionMenu, ContextMenu.如果自己通过Wind ...
- sql:无法解决 equal to 操作中 "Chinese_PRC_CI_AS" 和 "Chinese_Taiwan_Stroke_CI_AS" 之间的排序规则冲突。
--无法解决 equal to 操作中 "Chinese_PRC_CI_AS" 和 "Chinese_Taiwan_Stroke_CI_AS" 之间的排序规则冲 ...
- HihoCoder#1279 : Rikka with Sequence(dp 枚举子集 二进制 神仙题)
题意 题目链接 Sol 不愧是dls出的比赛啊,265个交了题的人只有8个有分Orz 做完这题,,感觉自己的位运算dp姿势升华了... 首先最裸的dp应该比较好想,设\(f[i][j][k]\)表示前 ...