Getting mouse click location of a label in qt

前端 未结 3 434
被撕碎了的回忆
被撕碎了的回忆 2020-12-17 22:31

I googled around and found this forum thread in which the OP seems to have had the exact problem I am having. The question is, how would I inherit from QLabel a

相关标签:
3条回答
  • 2020-12-17 22:56

    Yes, you can set up a signal on your CustomLabel class and have your overridden version of mousePressEvent emit it. i.e.

    class CustomLabel : public QLabel
    {
    Q_OBJECT
    signals:
        void mousePressed( const QPoint& );
    
    public:
        CustomLabel( QWidget* parent = 0, Qt::WindowFlags f = 0 );
        CustomLabel( const QString& text, QWidget* parent = 0, Qt::WindowFlags f = 0 );
    
        void mousePressEvent( QMouseEvent* ev );
    };
    
    void CustomLabel::mousePressEvent( QMouseEvent* ev )
    {
        const QPoint p = ev->pos();
        emit mousePressed( p );
    }
    
    CustomLabel::CustomLabel( QWidget * parent, Qt::WindowFlags f )
        : QLabel( parent, f ) {}
    
    CustomLabel::CustomLabel( const QString& text, QWidget* parent, Qt::WindowFlags f )
        : QLabel( text, parent, f ) {}
    

    The constructors just mimic those of the base QLabel and therefore simply pass their arguments straight on to the corresponding base constructors.

    0 讨论(0)
  • 2020-12-17 23:07

    just like this :D

    void CustomLabel::mousePressEvent(QMouseEvent *ev) 
    {
    QString x = QString::number(ev->x());
    QString y = QString::number(ev->y());
    qDebug() << x << "," << y;
    }
    
    0 讨论(0)
  • 2020-12-17 23:09

    Is it just me, or doesn't QMouseEvent already give the information you need?

    int QMouseEvent::x () const

    Returns the x position of the mouse cursor, relative to the widget that received the event.

    See also y() and pos().

    int QMouseEvent::y () const

    Returns the y position of the mouse cursor, relative to the widget that received the event.

    See also x() and pos().

    Ref: http://doc.qt.nokia.com/4.7.old/qmouseevent.html#x

    0 讨论(0)
提交回复
热议问题