어떻게 QML ApplicationWindow 형식을 올바르게 확장 할 수 있습니까? 설명서에 따르면 ApplicationWindow는 QQuickWindow를 인스턴스화합니다. 그래서 QQuickWindow에서 서브 클래스를 작성하고 QML에 유형을 MyWindow로 노출했습니다. 문제는 MyWindow가 QML 유형 ApplicationWindow를 실제로 확장하지 않으므로 menuBar 및 toolBar와 같은 모든 속성을 얻지 못한다는 것입니다. 어떻게 ApplicationWindow를 C++로 확장하고 QML에 노출시킬 수 있습니까? 여기에 내가 현재하고 있어요 무엇 : 나는 다른 이유로 QQuickWindow에 C++에서 내 자신의 추가가 필요C++에서 QML ApplicationWindow 확장
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" }
}
}
}
참고 :
여기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 파일입니다.
그래, qmlRegisterType을 사용하여 사용자 지정 QQuickWindow 유형을 등록했습니다. 문제는 어떻게 QtQuick.Controls.ApplicationWindow와 함께 제공되는 기능을 추가 할 수 있는가입니다. –
Firs off, 속성이 런타임에서 해석되는 한 QML에 노출 된 QtQuick.Controls.ApplicationWindow의 모든 기능을 상속해야합니다. 둘째, 새 기능을 추가하고 q_properties 등으로 노출 할 수 있습니다. – AlexanderVX
하지만 문제는 C++에서 상속받을 ApplicationWindow 클래스가 없다는 것입니다. ApplicationWindow는 Window (QML)에서 파생 된 QML 유형으로, QQuickWindow (C++)를 인스턴스화합니다. MyQuickWindow (C++)는 QQuickWindow (C++)에서 상속 받았지만 지금은 ApplicationWindow (QML)와 관련된 것이 없습니다. Qt 예제 "확장 QML - 상속 및 강제 변환"에서 링크되는 사용자 유형은 확장 된 Person 유형입니다. 내가 알고있는 C++ 백본이없는 ApplicationWindow를 확장하려고합니다. –