首页 > 代码库 > Qt编程获取鼠标移动事件

Qt编程获取鼠标移动事件

想做下面一个效果:想当鼠标移动到按钮上的时候,按钮就变大,图标换个大的,鼠标不在按钮上的时候,按钮就变小,图标也换成小的,感觉比较Cool


实现原理:为每个按钮设置监听属性

void MainHomeForm::init()
{
    //为按钮注册事件
    ui->SystemSetButton->installEventFilter(this);
    ui->ZoneSetButton->installEventFilter(this);
}

//系统监听器监听按钮对象
bool MainHomeForm::eventFilter(QObject *target, QEvent *e)
{
    if(target == ui->SystemSetButton)
    {
        if(e->type() == QEvent::Enter)
        {
            ui->SystemSetButton->resize(163,91);
            QIcon *MouseOnIcon = new QIcon(":/new/prefix1/back/系统设置2.png");
            ui->SystemSetButton->setIcon(*MouseOnIcon);
        }
        else if(e->type() == QEvent::Leave)
        {
            ui->SystemSetButton->resize(115,60);
            QIcon *MouseOffIcon = new QIcon(":/new/prefix1/back/系统设置.png");
            ui->SystemSetButton->setIcon(*MouseOffIcon);
        }
    }
    else if(target == ui->ZoneSetButton)
    {
        if(e->type() == QEvent::Enter)
        {
            ui->ZoneSetButton->resize(163,91);
            QIcon *MouseOnIcon = new QIcon(":/new/prefix1/back/区域控制2.png");
            ui->ZoneSetButton->setIcon(*MouseOnIcon);
        }
        else if(e->type() == QEvent::Leave)
        {
            ui->ZoneSetButton->resize(115,60);
            QIcon *MouseOffIcon = new QIcon(":/new/prefix1/back/区域控制.png");
            ui->ZoneSetButton->setIcon(*MouseOffIcon);
        }
    }
}

搞定,首先绑定按钮的installEventFilter为当前窗体,在窗体的EventFilter事件中,看移到了哪个按钮上面,就可以了。


还有一种就是,当鼠标按下去的时候,移动到按钮上面才会有变化:

//跟踪鼠标移动事件,当鼠标移动到中间的按钮上时,改变图标大小和内容
void MainHomeForm::mouseMoveEvent(QMouseEvent *e)
{
    e->accept();
    if(enterBtn(e->pos(),ui->SystemSetButton))
    {
        ui->SystemSetButton->setSizeIncrement(163,91);
        QIcon *MouseOnIcon = new QIcon(":/new/prefix1/back/系统设置2.png");
        ui->SystemSetButton->setIcon(*MouseOnIcon);
    }
}
//自己写的函数,判断鼠标是否在一个按钮区域内
bool MainHomeForm::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;
}