Qtラベルにホバーイベントを使用する必要がありますが、それに関する情報は見つかりませんでした。 私はui->label->setText("<a>ads</a>")
とonLinkHovered
のようなものを使ってみましたが、正しく動作しません。qtラベルのホバー効果を作成するには?
私はホバー上のテキストを変更する必要があります。
Qtラベルにホバーイベントを使用する必要がありますが、それに関する情報は見つかりませんでした。 私はui->label->setText("<a>ads</a>")
とonLinkHovered
のようなものを使ってみましたが、正しく動作しません。qtラベルのホバー効果を作成するには?
私はホバー上のテキストを変更する必要があります。
最も柔軟な解決策は、 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
});
ただし、ホバーイベントのみを変更することができます。 ラベルを元の状態に戻す必要がある場合は、最初の選択肢があります。
enterEvent
およびleaveEvent
をQLabel
とする。
例えば、このようなQLabel
のサブクラスを作成します。
class MyLabel : public QLabel
{
public:
MyLabel();
MyLabel(char* text, MainWindow* w) : QLabel(text, w) { }
void enterEvent(QEvent *event);
void leaveEvent(QEvent *event);
};
と、このようなenterEvent
とleaveEvent
を上書き:
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);
おそらく、ui-> label-> setToolTip()はあなたが探しているものですか?または、実際にツールチップのポップアップではなくラベルのテキストを変更する場合は、ラベルのenterEvent(QEvent *)とleaveEvent(QEvent *)をオーバーライドして、必要に応じてsetText()を呼び出します。 –