如何子类化 QML Window?
How to subclass QML Window?
我需要在 C++ 中添加一些功能。但是我在努力如何正确地创建我自己的 QML window 类型。
我尝试子类化 QQuickWindow 并注册我的新类型并在我的 QML 项目中使用它。但是启动时显示错误,我无法设置不透明度
mywindow.h
#include <QQuickItem>
#include <QQuickWindow>
#include <QWindow>
#include <QApplication>
#include <QObject>
class MyWindow : public QQuickWindow {
Q_OBJECT
public:
MyWindow(QQuickWindow *parent=nullptr);
public slots:
Q_INVOKABLE void mycppFeature();
mywindow.cpp
#include "reminderwindow.h"
MyWindow::MyWindow(QQuickWindow *parent):QQuickWindow(parent){
}
main.cpp
qmlRegisterType<MyWindow>("com.organization.my", 1, 0, "MyWindow");
SplashWindow.qml
import QtQuick 2.0
import QtQuick.Controls 2.5
import QtQuick.Window 2.15
import com.organization.my 1.0
MyWindow{
opacity: 0.8
MyWindow 已找到,但错误是“MyWindow.opacity”在 com.organizatino.my 1.0 中不可用。我相信我不知道如何正确地子类化 QML Window 类型。除了主应用程序 Window 之外,我还使用它
当我在没有不透明度的情况下使用它时,它可以正常工作
将此添加到您的 MyWindow class 声明:
QML_FOREIGN(QQuickWindow)
不透明度 属性 在 QWindow 上声明(由 QQuickWindow 继承)如下:
Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged REVISION(2, 1))
意味着它是在 QtQuick.Window
QML 模块的 2.1 版中添加的。
QML_FOREIGN 文档指出:
Declares that any QML_ELEMENT, QML_NAMED_ELEMENT(), QML_ANONYMOUS, QML_INTERFACE, QML_UNCREATABLE(), QML_SINGLETON, QML_ADDED_IN_MINOR_VERSION(), QML_REMOVED_IN_MINOR_VERSION(), QML_ATTACHED(), or QML_EXTENDED() macros in the enclosing C++ type do not apply to the enclosing type but instead to FOREIGN_TYPE. The enclosing type still needs to be registered with the meta object system using a Q_GADGET or Q_OBJECT macro.
这样就告诉 QML 机器不要针对您的模块验证版本限制,而是针对提供 QQuickWindow 的版本。
在这些与您类似的错误报告中进行更多讨论:
我需要在 C++ 中添加一些功能。但是我在努力如何正确地创建我自己的 QML window 类型。 我尝试子类化 QQuickWindow 并注册我的新类型并在我的 QML 项目中使用它。但是启动时显示错误,我无法设置不透明度
mywindow.h
#include <QQuickItem>
#include <QQuickWindow>
#include <QWindow>
#include <QApplication>
#include <QObject>
class MyWindow : public QQuickWindow {
Q_OBJECT
public:
MyWindow(QQuickWindow *parent=nullptr);
public slots:
Q_INVOKABLE void mycppFeature();
mywindow.cpp
#include "reminderwindow.h"
MyWindow::MyWindow(QQuickWindow *parent):QQuickWindow(parent){
}
main.cpp
qmlRegisterType<MyWindow>("com.organization.my", 1, 0, "MyWindow");
SplashWindow.qml
import QtQuick 2.0
import QtQuick.Controls 2.5
import QtQuick.Window 2.15
import com.organization.my 1.0
MyWindow{
opacity: 0.8
MyWindow 已找到,但错误是“MyWindow.opacity”在 com.organizatino.my 1.0 中不可用。我相信我不知道如何正确地子类化 QML Window 类型。除了主应用程序 Window 之外,我还使用它 当我在没有不透明度的情况下使用它时,它可以正常工作
将此添加到您的 MyWindow class 声明:
QML_FOREIGN(QQuickWindow)
不透明度 属性 在 QWindow 上声明(由 QQuickWindow 继承)如下:
Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged REVISION(2, 1))
意味着它是在 QtQuick.Window
QML 模块的 2.1 版中添加的。
QML_FOREIGN 文档指出:
Declares that any QML_ELEMENT, QML_NAMED_ELEMENT(), QML_ANONYMOUS, QML_INTERFACE, QML_UNCREATABLE(), QML_SINGLETON, QML_ADDED_IN_MINOR_VERSION(), QML_REMOVED_IN_MINOR_VERSION(), QML_ATTACHED(), or QML_EXTENDED() macros in the enclosing C++ type do not apply to the enclosing type but instead to FOREIGN_TYPE. The enclosing type still needs to be registered with the meta object system using a Q_GADGET or Q_OBJECT macro.
这样就告诉 QML 机器不要针对您的模块验证版本限制,而是针对提供 QQuickWindow 的版本。
在这些与您类似的错误报告中进行更多讨论: