Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting mouse click location of a label in qt

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 and reimplement the mousepressed event? I'm guessing it would be something like this:

class CustomLabel : public QLabel
{
public:
    //what about the constructors?
    void mousePressEvent ( QMouseEvent * ev );
}

void CustomLabel::mousePressEvent ( QMouseEvent * ev )
{
    QPoint = ev->pos();
    //I want to have another function get the event position.
    //How would I achieve this? It's void!
    //Is there perhaps some way to set up a signal and slot with the position?
}

And after I have successfully created a CustomLabel class, how would I be able to put it in design view?

like image 527
wrongusername Avatar asked Dec 03 '10 20:12

wrongusername


3 Answers

just like this :D

void CustomLabel::mousePressEvent(QMouseEvent *ev) 
{
QString x = QString::number(ev->x());
QString y = QString::number(ev->y());
qDebug() << x << "," << y;
}
like image 55
Fathurrahman Amin Avatar answered Oct 16 '22 03:10

Fathurrahman Amin


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.

like image 31
Troubadour Avatar answered Oct 16 '22 03:10

Troubadour


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

like image 36
Nick Meyer Avatar answered Oct 16 '22 02:10

Nick Meyer