【问题标题】:How to integrate QWidget in QML (Qt Quick 2.0)如何在 QML 中集成 QWidget(Qt Quick 2.0)
【发布时间】:2014-09-04 06:55:39
【问题描述】:

我已经关闭了返回 QFrame 的库。 我的程序的 GUI 是用 QML (Qt Quick 2.0) 开发的。 我需要将 QFrame (QWidget) 集成到 QML 的解决方案

注意: 我找到了示例:Qt_DIR/Examples/Qt-5.3/declarative/cppextensions/qwidgets,可以根据需要做一些事情。在这个例子中,QWidged 被添加到 QGraphicsProxyWidget。我这样编写代码,但是当我运行我的应用程序时,它会在控制台中显示:“无法将 QtQuick 1.0 项目(MyPushButton)添加到 QtQuick 2.0 场景中!”。这是这段代码:

class MyPushButton : public QGraphicsProxyWidget
{
    Q_OBJECT
    Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)

public:
    MyPushButton(QGraphicsItem* parent = 0)
        : QGraphicsProxyWidget(parent)
    {
        widget = new QPushButton("MyPushButton");
        widget->setAttribute(Qt::WA_NoSystemBackground);
        setWidget(widget);

        QObject::connect(widget, SIGNAL(clicked(bool)), this, SIGNAL(clicked(bool)));
    }

    QString text() const
    {
        return widget->text();
    }

    void setText(const QString& text)
    {
        if (text != widget->text()) {
            widget->setText(text);
            emit textChanged();
        }
    }

Q_SIGNALS:
    void clicked(bool);
    void textChanged();

private:
    QPushButton *widget;
};


private:
    QPushButton *widget;
};

【问题讨论】:

  • 分享一些代码,否则所有答案都是猜测。这也显示了您到目前为止所做的事情以及答案可以依赖/基于的内容。对于您的错误描述,我您的场景文件头中有一个 import QtQuick 2.0,您的表单文件头中有 QtQuick 1.0/1.1。尝试将您的表单“移植”到 QtQuick 2.0

标签: qt qml


【解决方案1】:

QGraphicsProxyWidget 旨在与 QtQuick 1 一起使用。已经有答案 Qt5. Embed QWidget object in QML

另一个想法 - 您可以将 QWidget 嵌入到 QQuickItem 中。或者查看 QtQUickControls 如何使用 QtQuick2 绘制它们

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2013-01-21
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多