qt 自定义窗口显示鼠标划过的轨迹
鼠标事件分为四种:
1.按下
2.抬起
3.移动
4.双击
鼠标事件继承与QWidget
void mouseDoubleClickEvent(QMouseEvent *event)
void mouseMoveEvent(QMouseEvent *event)
void mousePressEvent(QMouseEvent *event)
void mouseReleaseEvent(QMouseEvent *event)
重写这四个函数,就能够让自定义控件支持鼠标操作。
QT中用QMouseEvent类来表达一个鼠标事件
x,y :坐标
globleX,globleY:全局坐标
buttun:鼠标的按键
例子: 当鼠标按下的时候,画出鼠标移动的轨迹,直到松开
(1)按下时
m_pressFlag=true;
(2)移动时
记录轨迹
(3)松开时
m_pressFlag=false;
circlewidget.h
#ifndef CIRCLAWIDGET_H
#define CIRCLAWIDGET_H
#include <QFrame>
#include<QVector>
#include<QMouseEvent> class CircleWidget:public QFrame
{
Q_OBJECT
public:
CircleWidget(QWidget *parent);
~CircleWidget();
private:
void paintEvent(QPaintEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event); private:
bool m_pressFlag;
QVector<QPoint>m_points; }; #endif // CIRCLAWIDGET_H
circlewidget.cpp
# include"circlewidget.h"
#include<QPainter>
#include<QDebug> CircleWidget::CircleWidget(QWidget *parent):QFrame(parent)
{
m_pressFlag=false;
}
CircleWidget::~CircleWidget()
{ }
void CircleWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
int width=this->width();
int height=this->height();
painter.setBrush(QColor(,,));
painter.drawRect(,,width,height);
QPen pen(QColor(0xFF,,));
painter.setPen(pen);
if(m_pressFlag)
{
for(int i=;i<m_points.size()-;i++)
{
QPoint & p1=m_points[i];
QPoint & p2=m_points[i+];
painter.drawLine(p1,p2);
}
} } void CircleWidget::mouseDoubleClickEvent(QMouseEvent *event)
{ }
void CircleWidget::mouseMoveEvent(QMouseEvent *event)
{
if(m_pressFlag)
{
QPoint pos=event->pos();
m_points.append(pos);
qDebug("(%d,%d)",pos.x(),pos.y());
update();
}
}
void CircleWidget::mousePressEvent(QMouseEvent *event)
{
m_pressFlag=true; }
void CircleWidget::mouseReleaseEvent(QMouseEvent *event)
{
m_pressFlag=false;
}
结果:
#include"circlewidget.h"
#include<QPainter>
#include<QDebug>
CircleWidget::CircleWidget(QWidget*parent):QFrame(parent)
{
m_pressFlag=false;
}
CircleWidget::~CircleWidget()
{
}
voidCircleWidget::paintEvent(QPaintEvent*event)
{
QPainterpainter(this);
intwidth=this->width();
intheight=this->height();
painter.setBrush(QColor(,,));
painter.drawRect(,,width,height);
QPenpen(QColor(0xFF,,));
painter.setPen(pen);
if(m_pressFlag)
{
for(inti=;i<m_points.size()-;i++)
{
QPoint&p1=m_points[i];
QPoint&p2=m_points[i+];
painter.drawLine(p1,p2);
}
}
}
voidCircleWidget::mouseDoubleClickEvent(QMouseEvent*event)
{
}
voidCircleWidget::mouseMoveEvent(QMouseEvent*event)
{
if(m_pressFlag)
{
QPointpos=event->pos();
m_points.append(pos);
qDebug("(%d,%d)",pos.x(),pos.y());
update();
}
}
voidCircleWidget::mousePressEvent(QMouseEvent*event)
{
m_pressFlag=true;
}
voidCircleWidget::mouseReleaseEvent(QMouseEvent*event)
{
m_pressFlag=false;
}
qt 自定义窗口显示鼠标划过的轨迹的更多相关文章
- QT自定义窗口
qt 中允许自定义窗口控件,使之满足特殊要求, (1)可以修改其显示,自行绘制 (2)可以动态显示 (3)可以添加事件,支持鼠标和键盘操作 自定义控件可以直接在QtDesigner里使用,可以直接加到 ...
- QT自定义窗口(模拟MainWindow)
在这里自定义窗口是通过继承于QFrame,内部分为上下两部分,上半部分就是标题栏,下面是窗口的具体内容.上下两部分通过布局固定位置.最后窗口的各种鼠标拖动,缩放,等操作通过添加鼠标事件来完成一个窗口的 ...
- Qt自定义窗口部件
QtDesigner自定义窗口部件有两种方法:改进法(promotion)和插件法(plugin) 改进法 1.改进法之前,要先写好子类化QSpinBox后的HexspinBox.h和Hexs ...
- qt 自定义窗口绘制正弦曲线
circlewidget.h #ifndef CIRCLAWIDGET_H #define CIRCLAWIDGET_H #include <QFrame> #include<QVe ...
- wxpython 简单例子:显示文本框的窗口显示鼠标位置
简单例子来自教程: #!/bin/env python import wx class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__ ...
- QT笔记之自定义窗口拖拽移动
1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html . ...
- Qt入门(19)——自定义窗口部件
我们介绍可以画自己的第一个自定义窗口部件.我们也加入了一个有用的键盘接口.我们添加了一个槽:setRange(). void setRange( int minVal, int maxV ...
- 鼠标划过用户名时在鼠标右下角显示div展示用户资料
最近做一个网站论坛,为了方便会员之间相互了解,又不想再做一个页面展示用户资料,就想到了鼠标划过用户名时在鼠标右下角显示div展示用户资料这个效果, 这里要注意的该方法不是给每个用户名的旁边都绑定一个d ...
- jquery自定义滚动条 鼠标移入或滚轮时显示 鼠标离开或悬停超时时隐藏
一.需求: 我需要做一个多媒体播放页面,左侧为播放列表,右侧为播放器.为了避免系统滚动条把列表和播放器隔断开,左侧列表的滚动条需要自定义,并且滚动停止和鼠标离开时要隐藏掉. 二.他山之石: 案例来自h ...
随机推荐
- Django项目:CRM(客户关系管理系统)--48--39PerfectCRM实现登录+验证码+过期时间+页面保留账号
# gbacc_urls.py # ————————38PerfectCRM实现全局账号登录注销———————— from django.conf.urls import url from gbacc ...
- TZ_16ES6学习总结
1.块级作用域的引入 在ES6之前,js只有全局作用域和函数作用域,ES6中let关键字为其引入了块级作用域. { var a = 5; let b = 6; } console.log(a); // ...
- 碰撞的小球 ccf (模拟)
问题描述 试题编号: 201803-2 试题名称: 碰撞的小球 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐 ...
- php pdo操作数据库的方法
PDO 安装 你可以通过 PHP 的 phpinfo() 函数来查看是否安装了PDO扩展. 1.在 Unix /linux系统上安装 PDO 在Unix上或Linux上你需要添加以下扩展: exten ...
- bzoj 3598 [Scoi2014]方伯伯的商场之旅——数位dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3598 TJ:https://www.cnblogs.com/Zinn/p/9351218.h ...
- Visual studio加载项目时报错 尚未配置为Web项目XXXX指定的本地IIS,需要配置虚拟目录。解决办法。
在SVN上下载工程项目.使用visual studio打开时,出现如下提示: 查找相关资料,解决办法如下: 使用记事本打开工程目录下的.csproj文件.把<UseIIS>False< ...
- mac 下的 homebrew
如果安装了macport 就不能安装homebrew ,必须先卸载macport $ sudo port -f uninstall installed$ sudo rm -rf \/opt/local ...
- Codeforces 3D
题目链接 D. Least Cost Bracket Sequence time limit per test 1 second memory limit per test 64 megabytes ...
- 【《Objective-C基础教程 》笔记】(八)OC的基本事实和OC杂七杂八的疑问
一.疑问 1.成员变量.实例变量.局部变量的差别和联系,在訪问.继承上怎样表现. 2.属性@property 和 {变量列表} 是否同样.有什么不同. 3.类方法.类成员.类属性:实例方法.实例变量. ...
- vue自定义全局公共函数
单独零散的函数 在main.js里进行全局注册 Vue.prototype.ajax = function (){} 在所有组件里可调用 this.ajax() 多个函数定义在一个对象里 // xx. ...