gpt4 book ai didi

c++ - QQuickWindow 子类、visibilityChanged 和关闭信号

转载 作者:行者123 更新时间:2023-11-28 04:53:37 27 4
gpt4 key购买 nike

我正在尝试创建自己的窗口类并在 QML 中使用它。在第一步中,我尝试以这种方式子类化 QQuickWindow:

class TestWindow : public QQuickWindow {
Q_OBJECT
...
};

然后在main.cpp文件中:

qmlRegisterType<TestWindow>("test.components", 1, 0, "TestWindow");

现在在 QML 中我可以这样简单地使用它:

import test.components 1.0
TestWindow {
//onClosing: console.log("closing")
//onVisibilityChanged: console.log(visibility)
}

当我尝试取消注释其中一行时,问题出现了。 QML 引擎说:“TestWindow.onVisibilityChanged”在 test.components 1.0 中不可用。类似的事情发生在“onClosing”的情况下。我应该继承自 QWindow/QQuickWindow 但我还是尝试创建自己的。

  //connect(this, QQuickWindow::visibilityChanged, this, TestWindow::visibilityChanged);

并声明适当的 Q_PROPERTY,同时定义 READ/WRITE 和 NOTIFY 部分。我用“closingEvent”替换了关闭信号并做了这样的事情:

//connect(this, SIGNAL(closing(QQuickCloseEvent*)), this, SIGNAL(closingEvent(QQuickCloseEvent*)));

这也很奇怪,因为当我尝试使用新的信号/槽语法时,编译器提示不完整的 QQuickCloseEvent,它在任何地方都没有描述,似乎是 Qt 内部的东西。所以我不得不坚持使用旧的代码版本。

经过这些处理后,来自 import QtQuick.Window 2.2 的另一个“Window”(不是 TestWindow)表示“x”和“y”属性未定义。我尝试修复的警告/错误越多,其他东西就越无法正常工作。

有没有人遇到过类似的问题?

编辑:我发现它与用于 QWindow 和 QQuickWindow 的某些信号/槽/属性的 Q_REVISION 宏有关。我什至尝试使用这些行:

//qmlRegisterType<TestWindow>("test.components", 1, 0, "TestWindow");
//qmlRegisterType<TestWindow, 1>("test.components", 1, 0, "TestWindow");
qmlRegisterType<TestWindow, 2>("test.components", 1, 0, "TestWindow");

仍然没有成功。

最佳答案

我找到了解决方案。

  qmlRegisterType<TestWindow>("test.components", 1, 0, "TestWindow");
qmlRegisterRevision<QWindow, 1>("test.components", 1, 0);
qmlRegisterRevision<QQuickWindow, 1>("test.components", 1, 0);

我还必须注册基类的修订版。此处描述的解释:https://bugreports.qt.io/browse/QTBUG-22688在评论中。

关于c++ - QQuickWindow 子类、visibilityChanged 和关闭信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47649584/

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