QT - 悬停QLabel时发出信号

时间:2017-05-04 12:00:11

标签: c++ qt qlabel

我想在QT中用鼠标悬停QLabel时发出信号。

有可能吗?

如果没有,我该怎么做?

感谢。

2 个答案:

答案 0 :(得分:0)

您可以在没有QLabel子类化的情况下进行悬停处理。尝试下一个代码示例:

void LabelHoverHandler::attach(QLabel *label)
{
    label->setAttribute(Qt::WA_Hover, true);
    label->installEventFilter(this);
}

bool LabelHoverHandler::eventFilter(QObject *obj, QEvent *event)
{
    if (event->type() == QEvent::HoverEnter)
    {
        emit signalMouseHover(dynamic_cast<QLabel*>(obj) );
        qDebug() << "HoverEnter";
    }

    return false;
}

LabelHoverHandler头文件:

class LabelHoverHandler : public QObject
{
    Q_OBJECT
public:
    LabelHoverHandler(QObject *parent);
    virtual ~LabelHoverHandler() {};

    void attach(QLabel *label);

protected:
    bool eventFilter(QObject *obj, QEvent *event);

signals:
    void signalMouseHover(QLabel*);
};

只需创建LabelHoverHandler的实例,并使用所需的标签作为参数调用方法attach()

答案 1 :(得分:0)

可能的实施:

// mylabel.h
#ifndef MYLABEL_H
#define MYLABEL_H

#include <QLabel>

class MyLabel : public QLabel
{
    Q_OBJECT

public:
    MyLabel();
    ~MyLabel();

protected:
    virtual void enterEvent(QEvent *ev);
    virtual void leaveEvent(QEvent *ev);

private:
    bool hover;

};

#endif // MYLABEL_H

// mylabel.cpp
#include "mylabel.h"
#include <QEvent>

MyLabel::MyLabel()
{
    hover = false;
    setAttribute(Qt::WA_Hover, true);
}

MyLabel::~MyLabel()
{    
}

void MyLabel::enterEvent(QEvent *ev)
{
    if (!hover){
        hover = true;
        setText("Send signal here");
    }
    QLabel::enterEvent(ev);
}

void MyLabel::leaveEvent(QEvent *ev)
{
    if (hover){
        hover = false;
        setText("Mouse leave area");
    }
    QLabel::leaveEvent(ev);
}