代码之家  ›  专栏  ›  技术社区  ›  MusiGenesis

如何在QML文档中嵌入QLabel?

  •  0
  • MusiGenesis  · 技术社区  · 8 年前

    我发现了一个关于如何在QML文档中显示QWidget(特别是QLabel)的示例:

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

    问题是它使用了qtquick1,无法在我的应用程序(使用qtquick2)中编译。

    如何使用qtwick 2执行此操作?我需要做的就是这个原始示例所做的:创建一个 QLabel 并将其嵌入到QML文档中。

    以下是我目前所能做的。这与我上面发布的示例类似,只是没有 QGraphicsProxyWidget* mProxy; 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标签 在我的QML文件中:

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

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

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

    ... 这大概就是标签出现的原因,但是如果没有qgraphicsproxy widget来添加它,我就不能调用它。

    那我该怎么做呢?

    0 回复  |  直到 8 年前