首页 > 解决方案 > 如何在 QML 文档中嵌入 QLabel?

问题描述

我找到了如何在 QML 文档中显示 QWidget(特别是 QLabel)的示例:

https://kunalmaemo.blogspot.com/2011/07/how-to-display-qwidget-into-qml.html

问题是它使用 QtQuick 1 并且不会在我的应用程序(使用 QtQuick 2)中编译。

如何使用 QtQuick 2 做到这一点?我需要做这个原始示例所做的事情:QLabel在 c++ 端创建一个并将其嵌入到 QML 文档中。

到目前为止,这是我能够做到的。这类似于我在上面发布的示例,除了没有,QGraphicsProxyWidget* mProxy;因为它没有在 QtQuick 2 中编译,并且出于同样的原因,我将其设为 aQQuickView而不是 a 。QDeclarativeItem在 c++ 方面,我定义了一个名为QmlLabel.

标题:

class QmlLabel : public QQuickView
{
    Q_OBJECT
    Q_PROPERTY(QString text READ text WRITE setText)
public:
    explicit QmlLabel(QQuickView *parent = 0);
    ~QmlLabel();

public slots:

    void setText(const QString& text);
    QString text() const;

private:

    QLabel* mLabel;

};

执行:

QmlLabel::QmlLabel(QQuickView *parent) :
    QQuickView(parent)

{
    mLabel = new QLabel(QString(""));
    mLabel->setText("Your mother sews socks");
    mLabel->setStyleSheet("QLabel { background-color : red; color : 
        blue; white-space : pre-wrap; }");
}

QmlLabel::~QmlLabel()
{
    delete mLabel;
}

void QmlLabel::setText(const QString& text)
{
    mLabel->setText(text);
}

QString QmlLabel::text() const
{
    return mLabel->text();
}

我正在调用qmlRegisterType这个类,这允许我QmlLabel在我的 QML 文件中声明一个类型的对象,如下所示:

QmlLabel {
    id: whatever
    height: 50
    width: 200
}

一切都编译、构建和运行,但 QmlLabel 根本不可见。显然,构造函数中没有将创建的代码实际添加QLabel到任何内容的代码,因此即使标签创建成功,如果不添加到任何内容,它也不会可见。原始示例中的这一行:

mProxy = new QGraphicsProxyWidget(this);
mProxy->setWidget(mLabel);

...大概是标签出现的原因,但是如果没有 QGraphicsProxyWidget 将其添加到,我就无法调用它。

那么我怎样才能使这项工作呢?

标签: c++qtqmlqtquick2qtwidgets

解决方案


推荐阅读