关于qt鼠标事件实现,获取鼠标参数的方法。这一讲主要讲怎么应用上讲的鼠标事件实现一个小功能。
qq好友对话框右侧 未展开时如图:
鼠标移动到 “隐藏侧边”处单击可以隐藏侧边,隐藏后效果如图:
实现的范例效果如下
1.一般情况
2.鼠标移动到中间分割线中间区域时,效果
3.单击红色按钮后,效果
4.鼠标移动到边界,效果
下面讲解实现过程:
一般情况在QT中,这种伸缩窗体的实现有两种方法:一种是是直接用QSplitter分割器实现;另一种直接用布局管理器自己实现。本节用的是第二种方法实现的。布局管理器有一个layoutSizeConstraint属性,通过设置这个属性可以实现伸展功能。这里用默认属性即可。
1.整个结构分为左侧窗体和右侧窗体,因为左右窗体要用到鼠标事件,所以首先定义一个自定义窗体部件,继承于QFrame,重写 mouseMoveEvent事件,用于捕捉鼠标。MouseBase.h 文件如下:
qq好友对话框右侧 未展开时如图:
鼠标移动到 “隐藏侧边”处单击可以隐藏侧边,隐藏后效果如图:
实现的范例效果如下
1.一般情况
2.鼠标移动到中间分割线中间区域时,效果
3.单击红色按钮后,效果
4.鼠标移动到边界,效果
下面讲解实现过程:
一般情况在QT中,这种伸缩窗体的实现有两种方法:一种是是直接用QSplitter分割器实现;另一种直接用布局管理器自己实现。本节用的是第二种方法实现的。布局管理器有一个layoutSizeConstraint属性,通过设置这个属性可以实现伸展功能。这里用默认属性即可。
1.整个结构分为左侧窗体和右侧窗体,因为左右窗体要用到鼠标事件,所以首先定义一个自定义窗体部件,继承于QFrame,重写 mouseMoveEvent事件,用于捕捉鼠标。MouseBase.h 文件如下:
#ifndef
MOUSEBASE_H
#define
MOUSEBASE_H
#include
<QtGui>
#include
<QMouseEvent>
class
CMouseBase
:
public
QFrame
{
Q_OBJECT
public
:
CMouseBase
(
QWidget
*
parent
=
0
)
;
~
CMouseBase
(
)
;
signal
s
:
void
signal
sMousePosition
(
int
ix
,
int
iy
)
;
protected
:
void
mouseMoveEvent
(
QMouseEvent
*
e
)
;
}
;
#endif
2.实现文件如下:MouseBase.cpp
3.新建UI文件,ui中包括 主窗体,左窗体和右窗体类型为
CMouseBase,按钮。再把左右窗体放入网格布局管理器中。
4.绑定左右窗体的鼠标信号
5.信号处理函数如下:
qt版本:4.8.6,开发环境:vs2010 安装插件 qt-opensource-windows-x86-vs2010-4.8.6.exe qt-vs-addin-1.1.10.exe
#include
"MouseBase.h"
CMouseBase
::
CMouseBase
(
QWidget
*
parent
)
:
QFrame
(
parent
)
{
this
->
setMouseTracking
(
true
)
;
//设置此窗体是否跟踪鼠标
}
CMouseBase
::
~
CMouseBase
(
)
{
}
void
CMouseBase
::
mouseMoveEvent
(
QMouseEvent
*
e
)
{
emit
signal
sMousePosition
(
e
->
x
(
)
,
e
->
y
(
))
;
}
4.绑定左右窗体的鼠标信号
connect(ui.LeftFrame,SIGNAL(signalsMousePosition(int,int)),this,SLOT(slotsMousePosition(int,int)));
connect(ui.RightFrame,SIGNAL(signalsMousePosition(int,int)),this,SLOT(slotsMousePosition(int,int)));
5.信号处理函数如下:
void
test
::
slotsMousePosition
(
int
ix
,
int
iy
)
{
CMouseBase
*
pWidow
=
qobject_cast
<
CMouseBase
*>
(
sender
(
))
;
if
(
pWidow
==
ui
.
RightFrame
)
{
//这里传入的坐标是当前对象的相对坐标
int
iYTop
=
(
ui
.
RightFrame
->
height
(
)
-
ui
.
pushButton
->
height
(
))/
2
;
int
iYBottom
=
(
ui
.
RightFrame
->
height
(
)
+
ui
.
pushButton
->
height
(
))/
2
;
if
((
ix
<
10
)
&&
(
ix
>
0
)
&&
(
iy
>
iYTop
)
&&
(
iy
<
iYBottom
))
{
ui
.
pushButton
->
show
(
)
;
}
else
{
ui
.
pushButton
->
hide
(
)
;
}
}
else
{
ui
.
pushButton
->
hide
(
)
;
}
}
qt版本:4.8.6,开发环境:vs2010