如何正确地扩展QML ApplicationWindow类型?根据文档,ApplicationWindow实例化一个QQuickWindow。所以我尝试从QQuickWindow中进行分类,并将类型作为MyWindow公开给QML。问题是MyWindow实际上并没有扩展QML类型的ApplicationWindow,所以你没有得到像menuBar和toolBar这样的所有属性。我如何在C++中扩展ApplicationWindow并将它暴露给QML?这是目前我在做什么:在C++中扩展QML ApplicationWindow
class MyQuickWindow : public QQuickWindow
{
//...irrelevant additions
}
int main()
{
QGuiApplication app(argc, argv);
qmlRegisterType<MyQuickWindow>("MyExtensions", 1, 0, "MyApplicationWindow");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
return app.exec();
}
这里是QML文件:
import QtQuick 2.0
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.1
import MyExtensions 1.0
MyApplicationWindow {
width: 800
height: 600
visible: true
menuBar: MenuBar { // ERROR: menuBar is not a property
Menu {
title: "File"
MenuItem { text: "New" }
MenuItem { text: "Open" }
}
}
}
请注意,我需要在C++中我自己增加的QQuickWindow其他原因。
是的,我用qmlRegisterType来注册自定义的QQuickWindow类型。问题是我如何添加QtQuick.Controls.ApplicationWindow提供的功能。 – 2014-12-06 21:47:54
首先,只要属性解决了运行时间,它应该继承QtQuick.Controls.ApplicationWindow中暴露给QML的所有功能。其次,你可以添加新的功能,并通过q_properties等公开它。 – AlexanderVX 2014-12-06 22:29:38
好吧,但问题是没有任何ApplicationWindow类在C++中继承。 ApplicationWindow是QML类型,从Window(QML)派生,用于实例化QQuickWindow(C++)。在我的例子中,MyQuickWindow(C++)继承自QQuickWindow(C++),但现在我们没有任何与ApplicationWindow(QML)关联的东西。在你链接的Qt例子“Extending QML - Inheritance and Coercion”中,被扩展的Person类型是一个用户创建的类型。我试图扩展ApplicationWindow,它没有我知道的C++主干。 – 2014-12-06 22:58:58