2017-05-04 3 views
1

QT에서 마우스로 QLabel을 가리키면 신호를 내보내고 싶습니다.QT - 마우스를 가져 가면 QLabel을 내 보냅니다.

가능합니까?

그렇지 않은 경우 어떻게해야합니까?

감사합니다.

+0

가능한 중복 http://stackoverflow.com/questions/38946327/underline- qlabels-text-on-hover) – JLev

+0

'''MouseMoveEvent'''를 재 구현할 수 있습니다. –

+0

실제로 hover 할 때 CSS를 변경하고 싶지는 않습니다. 단추를 사용하여 레이블을 변경하고 싶습니다. – iAmoric

답변

0

QLabel의 서브 클래 싱없이 호버 처리를 할 수 있습니다.

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()를 호출

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 헤더 파일을 : 그것을 위해 다음 코드 샘플을 사용해보십시오.

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); 
} 
[ "호버에"밑줄 QLabel의 텍스트 (의
관련 문제