QT鼠标响应

来源:互联网 发布:ios 添加unity3d插件 编辑:程序博客网 时间:2024/05/21 10:34

QT鼠标响应(移动到按钮上按钮有响应)  

http://www.tonkv.com/blog/read.php?265#entrymore(原文地址)

在一些华丽的界面程序中,大多数鼠标经过某些组件时,组件就会有些动画效果事件。当然我们可以通过判断组件的hover事 件,但如果只是动画效果,我们倒是可以只设置按钮三种状态不同的动画图片也是简单的。如果需要鼠标经过某些组件时,组件就自动反应并且做一些事情。就要通 过事件完成了。在Qt中有mouseMoveEvent()事件,但它必须在按下去才会有事件的产生。因此我们需要激活组件的鼠标追踪属性;

    setMouseTracking(true);  //这是激活整个窗体的鼠标追踪

    Qtbtn_1->setMouseTracking(true); //进入某个按钮时,鼠标追踪属性失效,因此我们也需要激活该按钮的鼠标追踪功能

    Qtbtn_2->setMouseTracking(true);

     然后再实现mouseMoveEvent()事件

void MenuForm::mouseMoveEvent(QMouseEvent *e)

{

    e->accept();

    if(enterBtn(e->pos(),Qtbtn_1))

        Qlab_context->setText("这是第一个按钮");

    if(enterBtn(e->pos(),Qtbtn_2))

        Qlab_context->setText("这是第二个按钮");

}

    这里我使用另一个函数来完成判断鼠标是否在一个按钮区域内,如果在区域内只返回真,否则返回假

bool MenuForm::enterBtn(QPoint pp, QToolButton *btn)

{

    int height = btn->height();

    int width = btn->width();

    QPoint btnMinPos = btn->pos();

    QPoint btnMaxPos = btn->pos();

    btnMaxPos.setX(btn->pos().x()+width);

    btnMaxPos.setY(btn->pos().y()+height);

    if(pp.x() >= btnMinPos.x() && pp.y() >= btnMinPos.y()

        && pp.x() <= btnMaxPos.x() && pp.y() <= btnMaxPos.y())

        return true;

    else

        return false;

}


http://www.tonkv.com/blog/read.php?266#entrymore(原文地址)

“雁过留痕”的鼠标移动事件(续)

在 上面一篇文章中,我们介绍一种实际是通过鼠标当前坐标位置是否进入按钮坐标区域进行判断,这样实现起来多少有点麻烦。所以我们需要更方便简介的办法。很巧 合的是Qt为我们提供了这样的功能,那就事件过滤器【eventFilter()】。这是一个非常强大的功能。下面的例子中有九个按钮,当鼠标移动到每个 按钮上时,该按钮就会发生你所指定的反应。这里例子仅仅只是显示标签文字而已,当然你们也可以进行更复杂的操作。

首先我们要做的就是为每个按钮注册监视对象【installEventFilter()】。

void MenuForm::init()
{
    //为按钮注册事件
    Qtbtn_1->installEventFilter(this);
    Qtbtn_2->installEventFilter(this);
    Qtbtn_3->installEventFilter(this);
    Qtbtn_4->installEventFilter(this);
    Qtbtn_5->installEventFilter(this);

    Qtbtn_6->installEventFilter(this);
    Qtbtn_7->installEventFilter(this);
    Qtbtn_8->installEventFilter(this);
    Qtbtn_9->installEventFilter(this);
}

现在程序可以监视你注册后的对象了,然后我们要做的就是在监视对象的eventFiilter()函数中来处理目标对象事件。

bool MenuForm::eventFilter(QObject *target, QEvent *e)
{
    if(target == Qtbtn_1)
    {
        if(e->type() == QEvent::Enter)
            Qlab_context->setText("这是第一个按钮");
    }
    if(target == Qtbtn_2)
    {
        if(e->type() == QEvent::Enter)
            Qlab_context->setText("这是第二个按钮");
    }
    if(target == Qtbtn_3)
    {
        if(e->type() == QEvent::Enter)
            Qlab_context->setText("这是第三个按钮");
    }
    if(target == Qtbtn_4)
    {
        if(e->type() == QEvent::Enter)
            Qlab_context->setText("这是第四个按钮");
    }
    if(target == Qtbtn_5)
    {
        if(e->type() == QEvent::Enter)
            Qlab_context->setText("这是第五个按钮");
    }
    if(target == Qtbtn_6)
    {
        if(e->type() == QEvent::Enter)
            Qlab_context->setText("这是第六个按钮");
    }
    if(target == Qtbtn_7)
    {
        if(e->type() == QEvent::Enter)
            Qlab_context->setText("这是第七个按钮");
    }
    if(target == Qtbtn_8)
    {
        if(e->type() == QEvent::Enter)
            Qlab_context->setText("这是第八个按钮");
    }
    if(target == Qtbtn_9)
    {
        if(e->type() == QEvent::Enter)
            Qlab_context->setText("这是第九个按钮");
    }
    return QDialog::eventFilter(target, e);
}

这样的功能完成了。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 烟台住房公积金查询个人账户 个人住房公积金余额查询 成都市住房公积金中心 东莞住房公积金个人帐户查询 西安市住房公积金查询 黄石住房公积金查询 住房公积金客服电话 保定住房公积金 郑州住房公积金 住房公积金咨询电话 泉州市住房公积金个人查询 南充住房公积金查询个人账户 住房公积金电话号码 银川住房公积金查询 淮南住房公积金查询个人账户 毕节住房公积金查询 邯郸市住房公积金管理中心 渭南市住房公积金管理中心 连云港住房公积金 临沂住房公积金查询个人账户 南充住房公积金 住房公积金密码 运城住房公积金查询 住房公积金查询电话 住房公积金热线 昆明市住房公积金管理中心 乌鲁木齐住房公积金查询 玉林市住房公积金管理中心 南宁住房公积金网 宜宾市住房公积金管理中心 重庆住房公积金 银川住房公积金查询个人账户 洛阳住房公积金查询 住房公积金卡 东莞住房公积金查询 南京住房公积金管理中心 成都住房公积金 广西住房公积金查询 广西区直住房公积金查询入口 哈尔滨住房公积金管理中心 武汉住房公积金查询个人账户