簡體   English   中英

在C ++中擴展QML ApplicationWindow

[英]Extending QML ApplicationWindow in C++

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

請注意,出於其他原因,我需要在C ++中為QQuickWindow添加自己的附件。

似乎是qmlRegisterType的工作。 如果您錯過了C ++部分的內容,很難說,但是注冊類型應該會有所幫助。 那是為了公開類型本身,並且應該啟用派生的QQuickWindow功能(實際上是從ApplicationWindow派生的)。 但是對於要添加的內容,您需要處理Q_PROPERTY和Q_INVOKABLE(用於函數)機制。 請參閱整個Q_ * QObject宏。

如果這還不夠的話,那么有一個繼承的例子。

更正:作者正在處理QML制成的類型,但是他仍然可以嘗試自己模仿該類型。 ApplicationWindow.qml源代碼的路徑是:C:\\ Qt \\ 5.3 \\ Src \\ qtquickcontrols \\ src \\ controls其中C:\\ Qt \\ 5.3 \\是所選Qt版本的根目錄,我會嘗試這樣做,除非我們想了解顯式QML繼承。 該文件也可以在Qt源代碼存儲庫中找到

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM