如何在QML文档中嵌入QLabel?

时间:2018-08-23 00:06:20

标签: c++ qt qml qtquick2 qtwidgets

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

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

问题在于它使用QtQuick 1,并且无法在我的应用程序(使用QtQuick 2)中进行编译。

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

这是到目前为止我能做的。这与我上面发布的示例类似,除了没有QGraphicsProxyWidget* mProxy;,因为它没有在QtQuick 2中进行编译,并且我将其设置为QQuickView,而不是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,这使我可以在QML文件中声明类型为QmlLabel的对象,如下所示:

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

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

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

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

那我该如何做呢?

0 个答案:

没有答案