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

标签 c++ qt

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

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

最佳答案

最灵活的解决方案是创建您自己的继承自 QLabel 的小部件。这样,您可以覆盖 enterEventleaveEvent @Jeremy 和 @Moe 正在写关于哪些是 protected 。作为这些方法实现的一部分,您可以相应地更改文本或装饰。例如:

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

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

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

关于c++ - 如何创建qt标签悬停效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40729040/

相关文章:

c++ - std::unique_ptr constexpr 构造函数

使用 libxml2 解析 xml 文件时 UNIX 中的 C++

c++ - 使用 boost 传递函数指针参数

c# - 我想从 C++ 非托管代码调用 C# 委托(delegate)。无参数委托(delegate)工作正常,但带参数的委托(delegate)使我的程序崩溃

c++ - 如何使用 QFileSystemWatcher 监视文件夹的更改

Python (PyQt5) 版本的 Qt 标注示例

c++ - 我的程序不显示数组的内容。不知道我的程序是否颠倒了字符

c++ - 仅打印 QPlainTextEdit 文档纯文本

c++ - Qt3D中的内存泄漏

qt - 将资源添加到 QML 项目会导致编译速度非常慢