原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://blog.csdn.net/hiwubihe/article/details/38678305,qq:1269122125。

上一章节讲了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实现类似QQ伸缩窗口--鼠标事件应用的更多相关文章

  1. QT学习笔记5:QMouseEvent鼠标事件简介

    一.QMouseEvent的详细描述 首先请注意,Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击.释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理. QMouseEvent ...

  2. AJ学IOS(07)UI之UITextField代理事件_类似QQ登陆窗口的简单实现

    AJ分享,必须精品 先看效果图: 学习代码 // // NYViewController.m // 05-UITextField事件_UIKit复习 // // Created by apple on ...

  3. java实现类似qq的窗口对聊

    Swing实现界面,socket实现通信 package com.learn.talk; import java.awt.BorderLayout; import java.awt.Dimension ...

  4. Qt事件系统之二:鼠标事件和滚轮事件

    在Qt中,事件作为一个对象,继承自 QEvent 类,常见的有键盘事件 QKeyEvent.鼠标事件 QMouseEvent 和定时器事件 QTimerEvent 等,与 QEvent 类的继承关系图 ...

  5. Qt 隐藏标题栏 窗口移动 鼠标事件

    摘要 隐藏标题栏 头文件声明鼠标移动虚函数 .cpp文件实现功能 1 setWindowFlags(Qt::FramelessWindowHint | windowFlags()); 无标题栏移动窗体 ...

  6. 浅谈Qt事件的路由机制:鼠标事件

    请注意,本文是探讨文章而不是教程,是根据实验和分析得出的结果,可能是错的,因此欢迎别人来探讨和纠正. 这几天对于Qt的事件较为好奇,平时并不怎么常用,一般都是用信号,对于事件的处理,一般都是需要响应键 ...

  7. QTabWidget 实现类似QQ聊天窗口(拖动分离出新的窗口)

    新版本的QQ聊天窗口可以实现拖动,分离出新的窗口.浏览器等软件也可以实现类似操作.所以心血来潮想用Qt实现类似的功能.想用QTabWidget直接实现是很难的,仔细阅读源码,发现QTabWidget内 ...

  8. qt 窗口鼠标穿透

    Qt 不规则窗体 – 鼠标点击穿透 qt实现鼠标穿透,如果要被穿透窗口只有一层,也即没有嵌套窗口,直接只用对子窗口使用setAttribute (Qt::WA_TransparentForMouseE ...

  9. 2、Qt Project之鼠标事件监控

    鼠标事件监控: 对于鼠标时间监控的相关操作,我们在简历工程的时候需要选择的是QWidget基类,不选择QMainWindow基类,如下所示: Base class:QWidget Step1:我们首先 ...

随机推荐

  1. Yii widget使用

    关于widgets,他们在yii中的关系如下 system.web.widgets 系统自带最基本的widget zii.widgets 是基本扩展 zii.widgets.grid 是基本扩展的重要 ...

  2. spoj-694-Distinct Substrings(后缀数组)

    题意: 给定一个字符串,求不相同的子串的个数 分析: 每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同 的 前 缀 的 个 数 . 如 果 所 有 的 后 缀 按 照 suffix ...

  3. 根据标点符号分行,StringBuilder的使用;将字符串的每个字符颠倒输出,Reverse的使用

    一:根据标点符号分行,上图,代码很简单 二:代码 using System; using System.Collections.Generic; using System.ComponentModel ...

  4. Swap Nodes in Pairs——LeetCode

    Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...

  5. uoj#67. 新年的毒瘤(割顶)

    #67. 新年的毒瘤 辞旧迎新之际,喜羊羊正在打理羊村的绿化带,然后他发现了一棵长着毒瘤的树. 这个长着毒瘤的树可以用n个结点m 条无向边的无向图表示.这个图中有一些结点被称作是毒瘤结点,即删掉这个结 ...

  6. [C++关键字] 内置类型

    bool, char, short, char16_t (C++11), int, char32_t (C++11), float, long, double,在64位机器上测试各种类型的大小,代码如 ...

  7. 《University Calculus》-chaper8-无穷序列和无穷级数-p级数

    Q:定义p级数有如下形式,讨论p级数的敛散性.(p>o) 我们以p = 1作为分界点,因为实践表明这个分界点是最优区分度的.那么下面我们进行分情况讨论. 在这之前,我们有必要先引入一个检验敛散性 ...

  8. poj2926 曼哈顿最远距离

    题目链接:http://poj.org/problem?id=2926 #include<cstdio> #include<cstring> #include<cmath ...

  9. 最长回文 HDU 3068 (裸的Manacher)

    直接看代码: ============================================================================================= ...

  10. python list排序的两种方法及实例讲解

    对List进行排序,Python提供了两个方法方法1 用List的内建函数list sort进行排序list sort(func=None, key=None, reverse=False)Pytho ...