Seite 1 von 1

QEvent-Propagation mit accept()/ignore()

Verfasst: 16. Juli 2010 08:00
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