Qt程式設計獲取滑鼠移動事件

振長策而御宇內發表於2014-05-12

想做下面一個效果:想當滑鼠移動到按鈕上的時候,按鈕就變大,圖示換個大的,滑鼠不在按鈕上的時候,按鈕就變小,圖示也換成小的,感覺比較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;
}


相關文章