QT中使用Event Filter監聽按鈕事件,Release後按鈕不見

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

問題RT,在程式中我使用了QT的監聽事件,監聽滑鼠的位置,如果滑鼠在按鈕上就改變按鈕的ICON,但是在Release版本中(Debug版本沒問題),這些被監聽的按鈕都看不見了,於是開始了尋找答案的道路。

閒話少敘,直接上碼:

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);
            ui->SystemSetButton->setIcon(QIcon(":/new/prefix1/back/系統設定2.png"));
        }
        else if(e->type() == QEvent::Leave)
        {
            ui->SystemSetButton->resize(115,60);
            ui->SystemSetButton->setIcon(QIcon(":/new/prefix1/back/系統設定.png"));
        }
    }
    else if(target == ui->ZoneSetButton)
    {
        if(e->type() == QEvent::Enter)
        {
            ui->ZoneSetButton->resize(163,91);
            ui->ZoneSetButton->setIcon(QIcon(":/new/prefix1/back/區域控制2.png"));
        }
        else if(e->type() == QEvent::Leave)
        {
            ui->ZoneSetButton->resize(115,60);
            ui->ZoneSetButton->setIcon(QIcon(":/new/prefix1/back/區域控制.png"));
        }
    }
}

想法一:顯示不了按鈕圖片,應該是圖片的路徑問題吧,於是使用在Release路徑下新增imageformats資料夾,還是不行

想法二:我發現按鈕都點不了了,那應該不是圖片的路徑問題了,直接出在按鈕上,果斷註釋了為按鈕註冊事件的兩句話,發現Release後按鈕顯示了

發現程式中我忽略了這麼一個Warning:


哦,之前一直忽略了,原來是因為eventFilter這個函式我沒給返回值,那我給一個好了

返回FALSE吧,發現按鈕還是不見

返回TRUE吧,發現按鈕可見了

預測:應該是返回值影響了按鈕是否可見吧


最終解決辦法:EventFilter要返回True哦

相關文章