鼠标事件
鼠标事件分为四种:
AfSeekBar: 可拖动,可显示进度
鼠标事件分为四种:
(1)按下Press
(2)抬起Release
(3)移动Move
(4)双击Double Click
鼠标事件继承于QWidget
void mouseDoubleClickEvent ( QMouseEvent * event )
void mouseMoveEvent ( QMouseEvent * event )
void mousePressEvent ( QMouseEvent * event )
void mouseReleaseEvent ( QMouseEvent * event )
重写这四个函数,就能够让自定义控件支持鼠标操作。
QMouseEvent:
Qt中用QMouseEvent类来表达一个鼠标事件
x, y : 坐标
globalX, globalY: 全局坐标 (相对于整个屏幕)
button: 鼠标左键、右键、中键
事件与信号
自定义控件时,事件发生时,应该以信号的形式发送出去。
例:对于一个按钮,当它被按下时(press,release),对外发射了一个clicked()信号
自定义signal
1 | class ... |
当事件发生时, emit Clicked ( pos ); 通过emit操作将信号发射出去了。
注:emit并非C++语法,是Qt里面自己加的概念。
示例:自定义一个进度条SeekBar,当鼠标移入后,进入高亮状态;当鼠标移出后,回到普通状态
AfSeekBar
由于Qt自带的QSlider有点简陋,我们自定义一个SeekBar
注:QSlider部件提供了一个垂直或水平滑动条。滑块是一个用于控制有界值的典型部件。它允许用户沿水平或垂直方向移动滑块,并将滑块所在的位置转换成一个合法范围内的值
AfSeekBar: 可拖动,可显示进度
设定高亮/普通状态的触发事件为:void focused(bool yes);
当鼠标单击后,设置新的位置,并触发事件:void clicked(int progress);
设置当前进度条范围(min~max)
给出提示框,动态显示当前位置鼠标所指向的进度位置:void tracking(int progress, QPoint pos);
AfOverlay.h:
1 | #ifndef AFOVERLAY_H |
AfOverlay.c:
1 | #include "AfOverlay.h" |
AfSeekBar.h:
1 | #ifndef AFSEEKBAR_H |
AfSeekBar.c:
1 | #include "AfSeekBar.h" |
test.h:
1 | #ifndef TEST_H |
test.c:
1 | #include "test.h" |
main.c:
1 | #include "test.h" |
实现情况: