2014-11-24 67 views
3

我在網上搜索如何僅捕獲特定QWidget上的按鍵事件(QlineEdit) 要做的一種方法是從該類繼承,並通過虛擬keyPress功能, 但我不能這樣做,因爲我使用QtDesigner(是否有可能與QtDesigner做到這一點?)在QlineEdit上的Qt KeyPress事件

我也嘗試過在整個窗口上的KeyPress事件,但我需要只過濾事件時,具體lineEdit是積極的,我無法找到一種方式來這樣做(但必須有一種方法)

總之,什麼是解決這個問題的最佳方法?謝謝:)

回答

4

不,你不能這樣做與Designer。如果你不想使用繼承,那麼你應該使用事件過濾器。例如:

bool Dialog::eventFilter(QObject *obj, QEvent *event) 
{ 
    if (obj == ui->lineEdit && event->type() == QEvent::KeyPress) 
    { 
     QKeyEvent *key = static_cast<QKeyEvent *>(event); 
     qDebug() << "pressed"<< key->key(); 
    } 
    return QObject::eventFilter(obj, event); 
} 

要使用eventFilter你也應該:

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

qApp->installEventFilter(this);//in Dialog constructor 
+0

謝謝:)和究竟是什麼,你是指AAPP? main.cpp文件中的應用程序對象? – KianP 2014-11-25 19:04:26

+0

它的工作原理,但只捕獲重點是在應用程序的主窗口上的事件,我不應該像ui-> lineEdit.installEventFilter()? – KianP 2014-11-25 19:10:11

+0

@ user3798072 http://qt-project.org/doc/qt-5/qapplication.html#qApp瞭解詳情。它捕獲來自lineEdit的事件,如果過濾器無法從lineEdit捕獲事件,則lineEdit現在沒有此事件。 – Chernobyl 2014-11-25 19:18:45