C++/Qt/QContextMenuEvent
Handle QContextMenuEvent
<source lang="cpp"> Foundations of Qt Development\Chapter06\eventlister\eventwidget.cpp /*
* Copyright (c) 2006-2007, Johan Thelin * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of APress nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */
- include <QCloseEvent>
- include <QContextMenuEvent>
- include <QEvent>
- include <QFocusEvent>
- include <QHideEvent>
- include <QKeyEvent>
- include <QMouseEvent>
- include <QPaintEvent>
- include <QResizeEvent>
- include <QShowEvent>
- include <QWheelEvent>
- include "eventwidget.h"
EventWidget::EventWidget( QWidget *parent ) : QWidget( parent ) { } void EventWidget::closeEvent( QCloseEvent * event ) {
emit gotEvent( tr("closeEvent") );
} void EventWidget::enterEvent( QEvent * event ) {
emit gotEvent( tr("enterEvent") );
} void EventWidget::leaveEvent( QEvent * event ) {
emit gotEvent( tr("leaveEvent") );
} void EventWidget::hideEvent( QHideEvent * event ) {
emit gotEvent( tr("hideEvent") );
} void EventWidget::showEvent( QShowEvent * event ) {
emit gotEvent( tr("showEvent") );
} void EventWidget::paintEvent( QPaintEvent * event ) {
emit gotEvent( tr("paintEvent") );
} void EventWidget::contextMenuEvent( QContextMenuEvent * event ) {
emit gotEvent( tr("contextMenuEvent( x:%1, y:%2, reason:%3 )") .arg(event->x()) .arg(event->y()) .arg(event->reason()==2?"Other": event->reason()==1?"Keyboard": "Mouse") );
} void EventWidget::focusInEvent( QFocusEvent * event ) {
emit gotEvent( tr("focusInEvent( reason:%1 )") .arg( event->reason()==0?"MouseFocusReason": event->reason()==1?"TabFocusReason": event->reason()==2?"BacktabFocusReason": event->reason()==3?"ActiveWindowFocusReason": event->reason()==4?"PopupFocusReason": event->reason()==5?"ShortcutFocusReason": event->reason()==6?"MenuBarFocusReason": "OtherFocusReason" ) );
} void EventWidget::focusOutEvent( QFocusEvent * event ) {
emit gotEvent( tr("focusOutEvent( reason:%1 )") .arg( event->reason()==0?"MouseFocusReason": event->reason()==1?"TabFocusReason": event->reason()==2?"BacktabFocusReason": event->reason()==3?"ActiveWindowFocusReason": event->reason()==4?"PopupFocusReason": event->reason()==5?"ShortcutFocusReason": event->reason()==6?"MenuBarFocusReason": "OtherFocusReason" ) );
} void EventWidget::keyPressEvent( QKeyEvent * event ) {
emit gotEvent( tr("keyPressEvent( text:%1, modifiers:%2 )") .arg( event->text() ) .arg( event->modifiers()==0?tr("NoModifier"):( (event->modifiers()&Qt::ShiftModifier ==0?tr(""): tr("ShiftModifier "))+ (event->modifiers()&Qt::ControlModifier ==0?tr(""): tr("ControlModifier "))+ (event->modifiers()&Qt::AltModifier ==0?tr(""): tr("AltModifier "))+ (event->modifiers()&Qt::MetaModifier ==0?tr(""): tr("MetaModifier "))+ (event->modifiers()&Qt::KeypadModifier ==0?tr(""): tr("KeypadModifier "))+ (event->modifiers()&Qt::GroupSwitchModifier==0?tr(""): tr("GroupSwitchModifier")) ) ) );
} void EventWidget::keyReleaseEvent( QKeyEvent * event ) {
emit gotEvent( tr("keyReleaseEvent( text:%1, modifiers:%2 )") .arg( event->text() ) .arg( event->modifiers()==0?tr("NoModifier"):( (event->modifiers()&Qt::ShiftModifier ==0?tr(""): tr("ShiftModifier "))+ (event->modifiers()&Qt::ControlModifier ==0?tr(""): tr("ControlModifier "))+ (event->modifiers()&Qt::AltModifier ==0?tr(""): tr("AltModifier "))+ (event->modifiers()&Qt::MetaModifier ==0?tr(""): tr("MetaModifier "))+ (event->modifiers()&Qt::KeypadModifier ==0?tr(""): tr("KeypadModifier "))+ (event->modifiers()&Qt::GroupSwitchModifier==0?tr(""): tr("GroupSwitchModifier")) ) ) );
} void EventWidget::mouseDoubleClickEvent( QMouseEvent * event ) {
emit gotEvent( tr("mouseDoubleClickEvent( x:%1, y:%2, button:%3 )") .arg( event->x() ) .arg( event->y() ) .arg( event->button()==Qt::LeftButton? "LeftButton": event->button()==Qt::RightButton?"RightButton": event->button()==Qt::MidButton? "MidButton": event->button()==Qt::XButton1? "XButton1": "XButton2" ) );
} void EventWidget::mouseMoveEvent( QMouseEvent * event ) {
emit gotEvent( tr("mouseMoveEvent( x:%1, y:%2, button:%3 )") .arg( event->x() ) .arg( event->y() ) .arg( event->button()==Qt::LeftButton? "LeftButton": event->button()==Qt::RightButton?"RightButton": event->button()==Qt::MidButton? "MidButton": event->button()==Qt::XButton1? "XButton1": "XButton2" ) );
} void EventWidget::mousePressEvent( QMouseEvent * event ) {
emit gotEvent( tr("mousePressEvent( x:%1, y:%2, button:%3 )") .arg( event->x() ) .arg( event->y() ) .arg( event->button()==Qt::LeftButton? "LeftButton": event->button()==Qt::RightButton?"RightButton": event->button()==Qt::MidButton? "MidButton": event->button()==Qt::XButton1? "XButton1": "XButton2" ) );
} void EventWidget::mouseReleaseEvent( QMouseEvent * event ) {
emit gotEvent( tr("mouseReleaseEvent( x:%1, y:%2, button:%3 )") .arg( event->x() ) .arg( event->y() ) .arg( event->button()==Qt::LeftButton? "LeftButton": event->button()==Qt::RightButton?"RightButton": event->button()==Qt::MidButton? "MidButton": event->button()==Qt::XButton1? "XButton1": "XButton2" ) );
} void EventWidget::resizeEvent( QResizeEvent * event ) {
emit gotEvent( tr("resizeEvent( w:%1, h:%2 )") .arg( event->size().width() ) .arg( event->size().height() ) );
} void EventWidget::wheelEvent( QWheelEvent * event ) {
emit gotEvent( tr("wheelEvent( x:%1, y:%2, delta:%3, orientation:%4 )") .arg( event->x() ) .arg( event->y() ) .arg( event->delta() ).arg( event->orientation()==1? "Horizontal":"Vertical" ) );
}
Foundations of Qt Development\Chapter06\eventlister\eventwidget.h /*
* Copyright (c) 2006-2007, Johan Thelin * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of APress nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */
- ifndef EVENTWIDGET_H
- define EVENTWIDGET_H
- include <QWidget>
class QCloseEvent; class QContextMenuEvent; class QEvent; class QFocusEvent; class QHideEvent; class QKeyEvent; class QMouseEvent; class QPaintEvent; class QResizeEvent; class QShowEvent; class QWheelEvent; class EventWidget : public QWidget {
Q_OBJECT
public:
EventWidget( QWidget *parent = 0 );
signals:
void gotEvent( const QString );
protected:
void closeEvent( QCloseEvent * event ); void contextMenuEvent( QContextMenuEvent * event ); void enterEvent( QEvent * event ); void focusInEvent( QFocusEvent * event ); void focusOutEvent( QFocusEvent * event ); void hideEvent( QHideEvent * event ); void keyPressEvent( QKeyEvent * event ); void keyReleaseEvent( QKeyEvent * event ); void leaveEvent( QEvent * event ); void mouseDoubleClickEvent( QMouseEvent * event ); void mouseMoveEvent( QMouseEvent * event ); void mousePressEvent( QMouseEvent * event ); void mouseReleaseEvent( QMouseEvent * event ); void paintEvent( QPaintEvent * event ); void resizeEvent( QResizeEvent * event ); void showEvent( QShowEvent * event ); void wheelEvent( QWheelEvent * event );
};
- endif // EVENTWIDGET_H
Foundations of Qt Development\Chapter06\eventlister\main.cpp /*
* Copyright (c) 2006-2007, Johan Thelin * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of APress nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */
- include <QApplication>
- include <QTextEdit>
- include "eventwidget.h"
int main( int argc, char **argv ) {
QApplication app( argc, argv ); QTextEdit log; EventWidget widget; QObject::connect( &widget, SIGNAL(gotEvent(QString)), &log, SLOT(append(QString)) ); log.show(); widget.show(); return app.exec();
}
</source>