2014-11-25 61 views
1

我目前在我的項目中使用QT。我實現了一個從QMainWindow繼承的MainWindow類。如何在QMainWindow中按下Ctrl時禁用滾動功能

在主窗口,我處理鼠標滾輪事件是這樣的:

void MainWindow::wheelEvent (QWheelEvent * event) 
{ 
    if (event->modifiers().testFlag(Qt::ControlModifier)) { 
     if (event->delta() > 0) { 
     zoomInAct(); 
     } 
     else if(event->delta()<0){ 
     zoomOutAct(); 
     } 
    } 
} 

的問題是:當我按下控制鍵和滾輪鼠標,滾動條送花兒給人滾動到頂部或底部之前達到我wheelEvent功能。當按下控制按鈕並轉動鼠標時,您是否可以幫助放大/縮小? (不滾動滾動條)

對不起,我的英語不好。

回答

1

在這裏查看當前的實現,如果添加了自己的功能並且不想將事件繼續傳播給父級,那麼您尚未指定event-> accept()。在添加邏輯的情況下嘗試添加event->accept()

嘗試添加調試語句來測試事件是否到達此處或其他人正在處理事件。我的意思是其他人的孩子小部件。對UI的某些描述以及要放大的小部件將有助於進一步調查問題。

請確保您閱讀了Qt中的事件系統。 Docs available here

+0

哼,讓我檢查一下。它可能在MainWindow之前由一個子部件處理。我可以忽略處理鼠標滾輪上的小部件,但仍然可以在主窗口中處理嗎? – 2014-11-26 04:19:16

+0

這取決於。如前所述,您的用戶界面的小背景以及您想要縮放功能的小部件將有所幫助。你是否也嘗試添加調試語句?它的結果是什麼? – Pratham 2014-11-26 05:15:04

+0

謝謝Pratham,我有答案。我感謝您的指導來調試該程序。 – 2014-11-27 09:00:47

2

Acctualy,首先有一個處理輪子事件的子部件(默認事件句柄是滾動滾動條)。

解決方案:在按下控制鍵時,將子窗口小部件中的wheelevent發送到父窗口小部件(MainWindow)。

class WorkArea: public QWidget { 
... 
    virtual void wheelEvent(QWheelEvent *event) 
    { 
    if(event->modifiers().testFlag(Qt::ControlModifier)) 
     MainWindow::wheelEvent(event); 
    else 
     QWidget::wheelEvent(event); 
    } 
... 
} 
相關問題