在qt中获取标签的鼠标单击位置

时间:2010-12-03 20:53:15

标签: c++ qt user-interface location mouseevent

我用Google搜索并发现this forum thread,其中OP似乎遇到了我遇到的确切问题。问题是,我将如何从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 个答案:

答案 0 :(得分:11)

是的,您可以在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的构造函数,因此只需将它们的参数直接传递给相应的基础构造函数。

答案 1 :(得分:2)

就像这样:D

void CustomLabel::mousePressEvent(QMouseEvent *ev) 
{
QString x = QString::number(ev->x());
QString y = QString::number(ev->y());
qDebug() << x << "," << y;
}

答案 2 :(得分:1)

仅仅是我,还是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