簡體   English   中英

QT - 懸停QLabel時發出信號

[英]QT - emit signal when hover a QLabel

我想在QT中用鼠標懸停QLabel時發出信號。

可能嗎 ?

如果沒有,我該怎么辦?

謝謝。

您可以在沒有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()

可能的實施:

// 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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM