我必须在 Qt 标签上使用悬停事件,但我找不到任何相关信息。我尝试使用类似的东西ui->label->setText("<a>ads</a>"),onLinkHovered但它不正确。
我必须在悬停时更改文本。
最灵活的解决方案是创建您自己的继承自 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; }");
}
};
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)
但是,请注意,这种方式只能对悬停事件进行修改。因此,如果您需要将标签恢复到其原始状态,则第一个选择是要走的路。