如何创建qt标签悬停效果?

3 c++ qt

我必须在 Qt 标签上使用悬停事件,但我找不到任何相关信息。我尝试使用类似的东西ui->label->setText("<a>ads</a>")onLinkHovered但它不正确。

我必须在悬停时更改文本。

Dus*_*teh 5

最灵活的解决方案是创建您自己的继承自 QLabel 的小部件。这样,您可以覆盖enterEventleaveEvent @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; }");
    }
};
Run Code Online (Sandbox Code Playgroud)

另一种不太灵活的方法是为您在标签文本中指定的链接标签设置 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
});
Run Code Online (Sandbox Code Playgroud)

但是,请注意,这种方式只能对悬停事件进行修改。因此,如果您需要将标签恢复到其原始状态,则第一个选择是要走的路。