如何正確地擴展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