gpt4 book ai didi

c++ - 在 C++ 中扩展 QML ApplicationWindow

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:17:08 24 4
gpt4 key购买 nike

如何正确扩展 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++。

最佳答案

这似乎是 qmlRegisterType 的工作.很难说您是否遗漏了 C++ 部分的某些内容,但注册类型应该会有所帮助。那是为了暴露类型本身,并且应该启用派生的 QQuickWindow 功能(实际上是从 ApplicationWindow 派生的)。但是对于您要添加的内容,您需要处理 Q_PROPERTY和 Q_INVOKABLE(用于函数)机制。查看整个 Q_* QObject 宏。

如果这还不够,那么有一个这样的例子 inheritance .

更正:作者正在处理 QML 制作的类型,但他仍然可以尝试自己模仿该类型。 ApplicationWindow.qml 源代码的路径是: C:\Qt\5.3\Src\qtquickcontrols\src\controls 其中 C:\Qt\5.3\是所选 Qt 版本的根目录。我会尝试这样做,这是可行的,除非我们想要了解显式 QML 继承。该文件也可以在 Qt 源代码中找到 repository .

关于c++ - 在 C++ 中扩展 QML ApplicationWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27336539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com