qt实现类似QQ伸缩窗口--鼠标事件应用
2014-08-19 10:30
351 查看
关于qt鼠标事件实现,获取鼠标参数的方法。这一讲主要讲怎么应用上讲的鼠标事件实现一个小功能。
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();
signals:
void signalsMousePosition(int ix,int iy);
protected :
void mouseMoveEvent ( QMouseEvent * e );
};
#endif
2.实现文件如下:MouseBase.cpp
#include "MouseBase.h"
CMouseBase::CMouseBase (QWidget *parent) : QFrame(parent)
{
this->setMouseTracking ( true); //设置此窗体是否跟踪鼠标
}
CMouseBase::~CMouseBase ()
{
}
void CMouseBase::mouseMoveEvent ( QMouseEvent * e )
{
emit signalsMousePosition(e->x(),e->y());
}
3.新建UI文件,ui中包括 主窗体,左窗体和右窗体类型为CMouseBase,按钮。再把左右窗体放入网格布局管理器中。
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
安装插件 qt-opensource-windows-x86-vs2010-4.8.6.exe qt-vs-addin-1.1.10.exe
源代码下载地址:http://download.csdn.net/detail/hiwubihe/9542096
注:
技术在于交流、沟通,转载请注明出处并保持作品的完整性。
作者:程序人生原文:http://write.blog.csdn.net/postedit/38678305
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();
signals:
void signalsMousePosition(int ix,int iy);
protected :
void mouseMoveEvent ( QMouseEvent * e );
};
#endif
2.实现文件如下:MouseBase.cpp
#include "MouseBase.h"
CMouseBase::CMouseBase (QWidget *parent) : QFrame(parent)
{
this->setMouseTracking ( true); //设置此窗体是否跟踪鼠标
}
CMouseBase::~CMouseBase ()
{
}
void CMouseBase::mouseMoveEvent ( QMouseEvent * e )
{
emit signalsMousePosition(e->x(),e->y());
}
3.新建UI文件,ui中包括 主窗体,左窗体和右窗体类型为CMouseBase,按钮。再把左右窗体放入网格布局管理器中。
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
安装插件 qt-opensource-windows-x86-vs2010-4.8.6.exe qt-vs-addin-1.1.10.exe
源代码下载地址:http://download.csdn.net/detail/hiwubihe/9542096
注:
技术在于交流、沟通,转载请注明出处并保持作品的完整性。
作者:程序人生原文:http://write.blog.csdn.net/postedit/38678305
相关文章推荐
- qt实现类似QQ伸缩窗口--鼠标事件应用
- AJ学IOS(07)UI之UITextField代理事件_类似QQ登陆窗口的简单实现
- windows应用开发由浅入深(三)有关鼠标事件--设置鼠标点击测试值实现非标题栏拖动窗口
- 猫猫学IOS(七)UI之UITextField代理事件_类似QQ登陆窗口的简单实现
- 猫猫学IOS(七)UI之UITextField代理事件_类似QQ登陆窗口的简单实现
- (素材源码)猫猫学IOS(七)UI之UITextField代理事件_类似QQ登陆窗口的简单实现
- (素材源码)猫猫学IOS(七)UI之UITextField代理事件_类似QQ登陆窗口的简单实现
- 仿QQ悬挂窗口的实现(全局鼠标钩子)
- 仿QQ悬挂窗口的实现(全局鼠标钩子)
- Delphi 类似实现QQ多窗口显示任务栏上
- C#实现类似QQ的任务栏通知窗口
- Qt程序聊天弹屏问题简单解决方法(类似QQ聊天聊天窗口弹屏)
- winforms实现类似QQ消息框一样的右下角消息提示窗口
- android中类似 QQ震动窗口的实现,带声音和振动效果
- MFC实现类似qq的在屏幕右下角动画显示消息窗口 .
- Delphi 类似实现QQ多窗口显示任务栏上
- winforms实现类似QQ消息框一样的右下角消息提示窗口
- Flex 实现图文混排的控件(类似与QQ的对话窗口)
- 用Qt实现类似QQ截图的工具
- QTabWidget 实现类似QQ聊天窗口