QT에서 마우스로 QLabel을 가리키면 신호를 내보내고 싶습니다.QT - 마우스를 가져 가면 QLabel을 내 보냅니다.
가능합니까?
그렇지 않은 경우 어떻게해야합니까?
감사합니다.
QT에서 마우스로 QLabel을 가리키면 신호를 내보내고 싶습니다.QT - 마우스를 가져 가면 QLabel을 내 보냅니다.
가능합니까?
그렇지 않은 경우 어떻게해야합니까?
감사합니다.
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 헤더 파일을 : 그것을 위해 다음 코드 샘플을 사용해보십시오.
가능한 구현 :
// 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의 텍스트 (의
가능한 중복 http://stackoverflow.com/questions/38946327/underline- qlabels-text-on-hover) – JLev
'''MouseMoveEvent'''를 재 구현할 수 있습니다. –
실제로 hover 할 때 CSS를 변경하고 싶지는 않습니다. 단추를 사용하여 레이블을 변경하고 싶습니다. – iAmoric