此问题是由以下QML激发的:

ApplicationWindow {
    Rectangle {
        Text { text: "Hello World" }
    }

    Item {
        // I do something

        Window {
            Text { text: "Hello world too!" }
        }
    }
}


在此示例中,在项目内部有一个应用程序窗口,然后是第二个窗口。我正在尝试复制这种用法,但是是通过在扩展的QQuickWindow内部实例化QQuickItem来实现的,但是根据文档,我无法理解QQuickItem的类型不是QWindow。我想要的是这样的:

class Foo : public QQuickItem {
private:
    QQuickWindow * childWindow;
public:
    Foo(QQuickItem * parent = 0) : QQuickItem(parent) {
        childWindow = new QQuickWindow();
        childWindow->setParent(this);
        // Add custom items to childWindow
    }
}


不幸的是,由于childWindow->setParent(this)不会扩展QQuickItem,因此在QWindow上失败了。我怎么能以类似的方式做到这一点?

最佳答案

Window不是该项的子项,也不是易于使用以下代码查看的任何元素的子项:

ApplicationWindow {
    width: 100
    height: 100
    visible: true
    Rectangle {
        Text { text: "Hello World" }
    }

    Item{
        id: item
        Window{
            id: new_window
            visible: true
            color: "red"
            Component.onCompleted: console.log("new_window :",new_window.parent)
        }
        Component.onCompleted: console.log("item :", item.parent)
    }
}


输出:

qml: item : ContentItem_QMLTYPE_10(0x56353791dbe0)
qml: new_window : undefined


显然,可以看到ItemcontentItem的子代,而另一方面Window没有父代。

关于c++ - 如何从C++扩展QQuickItem创建QQuickWindow作为子级?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51953510/

10-12 20:33