C++ QQuickWindow子类,可视性更改和关闭信号

C++ QQuickWindow子类,可视性更改和关闭信号,c++,qt,qml,C++,Qt,Qml,我正在尝试创建自己的窗口类并在QML中使用它。在第一步中,我尝试以这种方式将QQuickWindow子类化: class TestWindow : public QQuickWindow { Q_OBJECT ... }; 然后在main.cpp文件中: qmlRegisterType<TestWindow>("test.components", 1, 0, "TestWindow"); 当我尝试取消注释其中一行时,问题出现了。QML引擎说:“TestWindow.onVisib

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

class TestWindow : public QQuickWindow {
Q_OBJECT
...
};
然后在main.cpp文件中:

qmlRegisterType<TestWindow>("test.components", 1, 0, "TestWindow");
当我尝试取消注释其中一行时,问题出现了。QML引擎说:“TestWindow.onVisibilityChanged”在test.components 1.0中不可用。“OnClose”中也会出现类似的情况。我应该从QWindow/QQuickWindow继承,但我还是尝试创建自己的

  //connect(this, QQuickWindow::visibilityChanged, this, TestWindow::visibilityChanged);
并声明适当的Q_属性,还定义了读/写和通知部分。我用“closingEvent”替换了关闭信号,并做了如下操作:

//connect(this, SIGNAL(closing(QQuickCloseEvent*)), this, SIGNAL(closingEvent(QQuickCloseEvent*)));
这也很奇怪,因为当我尝试使用新的signals/slots语法时,编译器会抱怨QQuickCloseEvent不完整,这在任何地方都没有描述,似乎是来自Qt内部的东西。所以我不得不坚持使用旧的代码版本

在这些处理之后,import QtQuick.Window 2.2中的另一个“窗口”(不是TestWindow)表示“x”和“y”属性未定义。我将尝试修复的警告/错误越多,其他停止正常工作的事情就越多

有没有人有过类似的问题

编辑:我发现这与QWindow和QQuickWindow在某些信号/插槽/属性的情况下使用的Q_修订宏有关。我甚至试着用这些台词:

//qmlRegisterType<TestWindow>("test.components", 1, 0, "TestWindow");
//qmlRegisterType<TestWindow, 1>("test.components", 1, 0, "TestWindow");
qmlRegisterType<TestWindow, 2>("test.components", 1, 0, "TestWindow");
//qmlRegisterType(“test.components”,1,0,“TestWindow”);
//qmlRegisterType(“test.components”,1,0,“TestWindow”);
qmlRegisterType(“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);
qmlRegisterType(“test.components”,1,0,“TestWindow”);
qmlRegisterRevision(“测试组件”,1,0);
qmlRegisterRevision(“测试组件”,1,0);
我还必须注册基类的修订。这里描述的解释是:在评论中。

我找到了一个解决方案

  qmlRegisterType<TestWindow>("test.components", 1, 0, "TestWindow");
  qmlRegisterRevision<QWindow, 1>("test.components", 1, 0);
  qmlRegisterRevision<QQuickWindow, 1>("test.components", 1, 0);
qmlRegisterType(“test.components”,1,0,“TestWindow”);
qmlRegisterRevision(“测试组件”,1,0);
qmlRegisterRevision(“测试组件”,1,0);

我还必须注册基类的修订。这里的解释:在评论.< /P>为什么在C++中对QQuickWindow进行子类化?为什么不在QML中使用QtQue.Windows?我需要提供一些额外的功能,这些功能可以在C++中更有效地完成。我只是在寻找尼斯解决方案(不只是工作一个)子类QQueQueLink似乎是个好主意。为什么在C++中对QQuickWindow进行子类化?为什么不在QML中使用QtQue.Windows?我需要提供一些额外的功能,这些功能可以在C++中更有效地完成。我只是在寻找一个好的解决方案(不仅仅是工作一个),子类化QQuickWindow似乎是个好主意。