Получение щелчка мышью на месте метки в qt - PullRequest
9 голосов
/ 03 декабря 2010

Я погуглил и нашел эту ветку форума , в которой ОП, похоже, имела именно ту проблему, которая у меня возникла.Вопрос в том, как бы я унаследовал от QLabel и переопределил событие нажатия мышью?Я предполагаю, что это будет что-то вроде этого:

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?
}

И после того, как я успешно создаю класс CustomLabel, как я смогу поместить его в представление дизайна?

Ответы [ 3 ]

11 голосов
/ 04 декабря 2010

Да, вы можете настроить сигнал для вашего класса CustomLabel и сделать так, чтобы ваша переопределенная версия mousePressEvent излучала его.т.е.

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 ) {}

Конструкторы просто имитируют базовые QLabel и поэтому просто передают свои аргументы напрямую соответствующим базовым конструкторам.

2 голосов
/ 25 мая 2012

просто так: D

void CustomLabel::mousePressEvent(QMouseEvent *ev) 
{
QString x = QString::number(ev->x());
QString y = QString::number(ev->y());
qDebug() << x << "," << y;
}
1 голос
/ 04 декабря 2010

Это только я, или QMouseEvent уже не дает нужную вам информацию?

int QMouseEvent :: x () const

Возвращает положение x курсора мыши относительно виджета, получившего событие.

См. Также y () и pos ().

int QMouseEvent :: y () const

Возвращает позицию y курсора мыши относительно виджета, получившего событие.

См. Также x () и pos ().

Ссылка: http://doc.qt.nokia.com/4.7.old/qmouseevent.html#x

...