2011-12-11 83 views
3

正如標題所示,有沒有辦法讓一個禁用的小部件接收鼠標事件?Qt 4.4:禁用的小部件接收鼠標事件

我正在使用QWidget::setEnabled()來更改窗口小部件的外觀,但我仍然希望接收它們的鼠標事件。在此先感謝:)

+1

如果你只是想改變它們的外觀,但仍然使它們互動,我建議你使用替代方法而不是禁用小部件。根據定義,禁用的小部件旨在不具有交互性。 – Chris

+0

是的,我覺得這種實現是不正確的。但是,它是更大系統的一部分,因此暫時必須以這種方式進行:( –

回答

3

您可以使用相關小部件上的事件過濾器來執行此操作。見QObject::eventFilter()。你的實現可能是這樣的:

bool MainWindow::eventFilter(QObject *obj, QEvent *event) 
{ 
    if (ui->pushButton) 
    { 
     if (event->type() == QEvent::MouseButtonRelease) 
     { 
      qDebug() << "mouse button"; 
      return true; 
     } else 
     { 
      return false; 
     } 
    } else 
    { 
     // pass the event on to the parent class 
     return QMainWindow::eventFilter(obj, event); 
    } 
} 

即使按鈕被禁用,這將工作。

+0

您忘了提及您需要首先安裝installEventFilter()。 – Dainius

+0

謝謝。包含的鏈接中的信息涵蓋了自發布以來便已崩潰。該鏈接現在可以正常運行並且具有該信息。 –