欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

QML中如何使用tooltip

程序员文章站 2022-03-09 13:34:43
...

最近在学习QML的项目遇到了一个问题,发现在QML中所有组件都没有tooltip类似的属性,而这在QWidget中是可以轻而易举的做到的,但在QML中缺没有。于是在网上查了资料,在Qt5.7之后的版本才组件才可以使用tooltip属性,而我的环境是5.2.0,所以就没有办法使用tooltip了吗,当然有办法了,只是稍微麻烦一点而已。

因为C++和QML是可以互相调用的嘛,所以利用这一点就可以。自己写一个ToolTip类,注意在QML中调用的函数需要声明为Q_INVOKABLE。

//ToolTip.h
#ifndef TOOLTIP_H
#define TOOLTIP_H

#include <QObject>

class ToolTip : public QObject
{
    Q_OBJECT
public:
    explicit ToolTip(QObject *parent = nullptr);
    Q_INVOKABLE void showToolTip(QString = "");
    Q_INVOKABLE void hideToolTip();
};

#endif // TOOLTIP_H
//ToolTip.cpp
#include "tooltip.h"
#include <QToolTip>
ToolTip::ToolTip(QObject *parent) : QObject(parent)
{
}

void ToolTip::showToolTip(QString txt){
    QToolTip::showText(QCursor::pos(), txt);
}

void ToolTip::hideToolTip()
{
    QToolTip::hideText();
}

类写好了就可以调用了,在 QQmlApplicationEngine 中注册一下,起个在QML中调用的别名。

ToolTip toolTip;
engine.rootContext()->setContextProperty("toolTip",&toolTip);

在QML中使用tooltip吧,比如我对Text设置tooltip

Text {
    id: close
    text: qsTr("X")
    width: 16
    height: 16
    anchors.right: parent.right
    anchors.top: parent.top
    anchors.topMargin: 10
    anchors.rightMargin: 10
    MouseArea{
        anchors.fill: parent
        cursorShape: Qt.PointingHandCursor
        hoverEnabled: true
        onClicked: Qt.quit()
        onEntered: toolTip.showToolTip(qsTr("关闭"));
        onExited: toolTip.hideToolTip();
    }
}

 

相关标签: QML