Qt_GUI_IM_2_5 - 8BitsCoding/RobotMentor GitHub Wiki

bool QCoreApplication::notify(QObject* recevier, QEvent* event

  • Can override this method in a QApplication subclass and hijack events
  • This function is called for all events sent to any object in any thread.
  • Errors you make in this method can seriously harm the rest of your application.

์ •๋ฆฌํ•˜์ž๋ฉด ์„ธ ๊ตฐ๋ฐ์—์„œ Event๋ฅผ Handling ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • QApplication::notify() : ์œ„ํ—˜
  • QObject::event() : event Filter
  • ๊ฐ Object์˜ evnet์ฒ˜๋ฆฌ

Event Propagation ๊ฐ„๋‹จ ์˜ˆ

class MyLineEdit : public QLineEdit
{
    Q_OBJECT
public:
    explicit MyLineEdit(QWidget* parent = nullptr);

protected:
    void keyPressEvent(QKeyEvent* event) override;
    void keyReleaseEvent(QKeyEvent* event) override;
}
  • For event propagation to work, you have to call the parent implementation in your subclass override.

Event Filters

  • Filters are useful when one object wants to listen in on events from another object!
  • bool QObject::eventFilter(QObject* watched, QEvent* event)
class KeyboardFilter : public QObject
{
    Q_OBJECT
public:
    explicit KeyboardFilter(QObject* parent= nullptr, QString msg = "");

protected:
    bool eventFilter(QObject* dest, QEvent* event);
};
bool KeyboardFilter::eventFilter(QObject* dest, QEvent* event)
{
    if(event->type() == QEvent::KeyPress)
    {
        qDebug() << "Event filter for " << message << " triggered";

        QKeyEvent* keyEvent = static_cast<QKeyEvent*>(evnet);

        static QString digits = QString("12345");

        if(digits.indexOf(keyEvent->text()) != -1)
            return true;
    }

    return QObject::eventFilter(dest, event);
}
โš ๏ธ **GitHub.com Fallback** โš ๏ธ