2016-11-21 4 views
0

Qtラベルにホバーイベントを使用する必要がありますが、それに関する情報は見つかりませんでした。 私はui->label->setText("<a>ads</a>")onLinkHoveredのようなものを使ってみましたが、正しく動作しません。qtラベルのホバー効果を作成するには?

私はホバー上のテキストを変更する必要があります。

+0

おそらく、ui-> label-> setToolTip()はあなたが探しているものですか?または、実際にツールチップのポップアップではなくラベルのテキストを変更する場合は、ラベルのenterEvent(QEvent *)とleaveEvent(QEvent *)をオーバーライドして、必要に応じてsetText()を呼び出します。 –

答えて

2

最も柔軟な解決策は、 QLabelから継承する独自のウィジェットを作成します。このようにして、のenterEventを無効にすることができます。leaveEvent @Jeremyと@Moeはどちらが保護されているかについて書いています。これらのメソッドの実装の一部として、それに応じてテキストや装飾を変更することができます。例:

class CustomLabel : public QLabel 
{ 
    Q_OBJECT 
public: 
    CustomLabel(QWidget* parent = nullptr) : QLabel(parent){ } 

protected: 
    void enterEvent(QEvent *ev) override 
    { 
     setStyleSheet("QLabel { background-color : blue; }"); 
    } 

    void leaveEvent(QEvent *ev) override 
    { 
     setStyleSheet("QLabel { background-color : green; }"); 
    } 
}; 

もう1つの方法は、ラベルテキストで指定したリンクタグのhref属性を設定することです。この方法でテキストは実際のリンクとして扱われ、linkHoveredシグナルを使用して接続することができます。例:

ui->label->setText("<a href='www.google.com'>link</a>"); 
connect(ui->label, &QLabel::linkHovered, this, [this](const QString&) 
{ 
    // do smth with the widget/text 
}); 

ただし、ホバーイベントのみを変更することができます。 ラベルを元の状態に戻す必要がある場合は、最初の選択肢があります。

0

enterEventおよびleaveEventQLabelとする。

例えば、このようなQLabelのサブクラスを作成します。

class MyLabel : public QLabel 
{ 
public: 
    MyLabel(); 
    MyLabel(char* text, MainWindow* w) : QLabel(text, w) { } 

    void enterEvent(QEvent *event); 
    void leaveEvent(QEvent *event); 
}; 

と、このようなenterEventleaveEventを上書き:

void MyLabel::enterEvent(QEvent *event) { 

    qDebug() << "Entered!"; 
    // Change your text here 
} 

void MyLabel::leaveEvent(QEvent *event) { 

    qDebug() << "Left!"; 
} 

あなたはこのようになりました、このクラスのインスタンスを作成することができます。

MainWindow w; 

MyLabel myLabel("A Test Label", &w); 
関連する問題