博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
qt实现类似QQ伸缩窗口--鼠标事件应用
阅读量:5265 次
发布时间:2019-06-14

本文共 1837 字,大约阅读时间需要 6 分钟。

原创文章,引用请保证原文完整性,尊重作者劳动,原文地址,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 
源代码下载地址:

 

转载于:https://www.cnblogs.com/qq1269122125/p/3923977.html

你可能感兴趣的文章
架构篇 | LAMP 架构应用案例 - 部署 PHPMyAdmin 系统(二)
查看>>
Shell 脚本中 '$' 符号的多种用法
查看>>
Linux 系统结构详解
查看>>
CentOS 8 网卡命令
查看>>
Shell编程 | 脚本参数与交互及常见问题
查看>>
CentOS 8 正式发布!
查看>>
iView-admin2.0前后台axios跨域问题以及用户登录逻辑
查看>>
修改Nodejs内置的npm默认配置路径方法
查看>>
SQL Server比较2table字段的差异
查看>>
.net 获取CPU频率 内存 磁盘大小,域名 端口 虚拟目录等
查看>>
angular vue通过node启动项目局域网内关闭防火墙无法访问的解决办法
查看>>
pc 媒体查询
查看>>
angular6 增加webpack配置 亲测可用
查看>>
Git 忽略提交 .gitignore
查看>>
div或者p标签单行和多行超出显示省略号
查看>>
angular http 节流
查看>>
autoprefixer
查看>>
kkFileView在centos7上安装
查看>>
Elasticsearch 滚动重启 必读
查看>>
win8快捷键
查看>>