qt实现类似QQ伸缩窗口--鼠标事件应用

关于qt鼠标事件实现,获取鼠标参数的方法。这一讲主要讲怎么应用上讲的鼠标事件实现一个小功能。
 qq好友对话框右侧 未展开时如图:

qt实现类似QQ伸缩窗口--鼠标事件应用_第1张图片
鼠标移动到 “隐藏侧边”处单击可以隐藏侧边,隐藏后效果如图:
qt实现类似QQ伸缩窗口--鼠标事件应用_第2张图片 
实现的范例效果如下

1.一般情况
qt实现类似QQ伸缩窗口--鼠标事件应用_第3张图片 
2.鼠标移动到中间分割线中间区域时,效果
qt实现类似QQ伸缩窗口--鼠标事件应用_第4张图片
 

3.单击红色按钮后,效果
qt实现类似QQ伸缩窗口--鼠标事件应用_第5张图片

4.鼠标移动到边界,效果
qt实现类似QQ伸缩窗口--鼠标事件应用_第6张图片
 

下面讲解实现过程:
一般情况在QT中,这种伸缩窗体的实现有两种方法:一种是是直接用QSplitter分割器实现;另一种直接用布局管理器自己实现。本节用的是第二种方法实现的。布局管理器有一个layoutSizeConstraint属性,通过设置这个属性可以实现伸展功能。这里用默认属性即可。
1.整个结构分为左侧窗体和右侧窗体,因为左右窗体要用到鼠标事件,所以首先定义一个自定义窗体部件,继承于QFrame,重写
mouseMoveEvent事件,用于捕捉鼠标。MouseBase.h 文件如下:
 
#ifndef  MOUSEBASE_H
#define  MOUSEBASE_H
#include  
#include  
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
 
#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 ( )) ;
   
}
 
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://blog.csdn.net/hiwubihe/article/details/38678305
 

你可能感兴趣的:(QT开发基础)