【发布时间】:2014-12-06 21:08:32
【问题描述】:
如何正确扩展 QML ApplicationWindow 类型?根据文档,ApplicationWindow 实例化了一个 QQuickWindow。所以我尝试从 QQuickWindow 进行子类化并将类型作为 MyWindow 暴露给 QML。问题是 MyWindow 实际上并没有扩展 QML 类型的 ApplicationWindow,所以你没有得到所有的属性,比如 menuBar 和 toolBar。如何在 C++ 中扩展 ApplicationWindow 并将其公开给 QML?这是我目前正在做的事情:
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" }
}
}
}
请注意,出于其他原因,我需要在 QQuickWindow 中添加自己的 C++ 内容。
【问题讨论】: