QEvent-Propagation mit accept()/ignore()

Alles rund um die Programmierung mit Qt
Antworten
AlGaN
Beiträge: 25
Registriert: 25. März 2006 12:45

QEvent-Propagation mit accept()/ignore()

Beitrag von AlGaN »

Hallo,

hab etwas Schwierigkeiten, das Konzept der Event-Propagation zu verstehen. Folgendes Szenario: Eigener Button, implementiert Event-Handler f. Mausklicks:

Code: Alles auswählen

class NoisyButton : public QPushButton
{
    Q_OBJECT
public:
    NoisyButton(QWidget* parent = 0);

    virtual ~NoisyButton();

    bool isFunctional() const {
        return mFunctional;
    }

protected:
    virtual void mousePressEvent(QMouseEvent* e)
    {
        if (!isFunctional())
        {
            mPlayBack->playback("disabled.wav");
            e->accept();
        }
        else
        {
            e->ignore();
            QPushButton::mousePressEvent(e);
         }
    }

[...]

private:
    bool mFunctional;
};

};
Laut Doku wird mit accept() das Event angenommen, propagiert also nicht weiter zum Parent (QPushButton), während ignore() dafür sorgt, dass das Event zum Parent geleitet wird. Reicht es dann, ignore() aufzurufen, und der explizite Aufruf des Event-Handlers f. PushButton (QPushButton::mousePressEvent(e)) kann entfallen, oder muss der Standard-Eventhandler f. QPushButton immer aufgerufen werden?

Danke für alle Hinweise
Antworten