2014-10-31 63 views
0

我試圖創建一個按Ctrl +鼠標滾輪宏來放大和縮小在我的應用程序的形象圖的。的Qt:QWheelEvent不是指價值

目前,我嘗試使用當前代碼:但是我得到的錯誤QWheelEvent does not refer to a value

new QShortcut(QKeySequence(Qt::CTRL + QWidget::wheelEvent(QWheelEvent *event)), this, SLOT(zoom())); 

。我在頭文件中包含了所有必要的內容,所以我不明白爲什麼我會收到錯誤。

QKeySequence內部綁定Widget事件是否合法?如果是這樣,我應該如何處理這個事件?

回答

1

以這種方式不能使用QKeySequence。你應該重新實現wheelEvent或使用下一個事件過濾器(它例如如何放大/縮小在textEdit,您可以使用此代碼對你的特殊情況):

bool MainWindow::eventFilter(QObject *obj, QEvent *event) 
{ 
    if(obj == ui->plainTextEdit && event->type() == QEvent::Wheel) 
    { 
     QWheelEvent *wheel = static_cast<QWheelEvent*>(event); 
     if(wheel->modifiers() == Qt::ControlModifier) 
      if(wheel->delta() > 0) 
       ui->plainTextEdit->zoomIn(2); 
      else 
       ui->plainTextEdit->zoomOut(2); 
    } 
    return QObject::eventFilter(obj, event); 
} 

主要思想:擋輪事件和檢查Ctrl按下修飾符。

要使用eventFilter你還應該:

protected: 
    bool eventFilter(QObject *obj, QEvent *event);//in header 

qApp->installEventFilter(this);//in constructor 

注:我發現例如與事件過濾器,因爲它不需要子類,它是不是更好或別的東西,重新實現wheelEvent用相似的代碼,你會得到完全相同的結果。

+0

謝謝,但我怎麼能綁定事件以使其只觸發如果Ctrl鍵被按下,太有關係嗎? – Alex 2014-10-31 14:35:30

+0

哦,等一下我看,輪 - >修飾符()線處理? – Alex 2014-10-31 14:35:58

+0

輝煌,現在我明白了 - 謝謝:) – Alex 2014-10-31 14:39:09