C++ Qt-QML单态智能感知

C++ Qt-QML单态智能感知,c++,qt,singleton,qml,intellisense,C++,Qt,Singleton,Qml,Intellisense,Qt-QML,它们确实工作,但在QML引用中没有智能感知。我能实现智能感知吗 pragma Singleton import QtQuick 2.0 import QtQuick.Window 2.3 Item { property int iMode: 0 property bool bSwapLeftRight: false 注册它: qmlRegisterSingletonType(QUrl(QLatin1String("qrc:/GlobalSettings.qml"

Qt-QML,它们确实工作,但在QML引用中没有智能感知。我能实现智能感知吗

pragma Singleton
import QtQuick 2.0
import QtQuick.Window 2.3

Item {
    property int iMode: 0
    property bool bSwapLeftRight: false
注册它:

qmlRegisterSingletonType(QUrl(QLatin1String("qrc:/GlobalSettings.qml")), "ncs.global", 1, 0, "SingletonSettings" );
第二个例子:

ctxt->setContextProperty("someModel", QVariant::fromValue(ownModel));
ctxt->setContextProperty("globalControl", QVariant::fromValue(globalControl.Get()));
第一个我在使用QML时实现了IntelliSense,第二个是singleton,我没有实现IntelliSense。计划通过这个程序将一些C++定义的枚举暴露给QML,但是当没有提供智能感知时,它会释放值。 问题是,QtQuick和Creator是否支持单例类的IntelliSense?值得进一步调查吗

添加更多详细信息,主要问题不是关于枚举,而是IntelliSense(自动完成):

一些片段:
main.cpp:
//正则指针
SomeModel*ownModel=新的SomeModel();
//自定义单例实现
GlobalControlSP globalControl=globalControl::GetInstance();
//我真的不想要这条线。GlobalControl应该是singleton,这会受到怎样的威胁?
qmlRegisterType(“ncs.global”,1,0,“global”);
//注册“Pragma Singleton”文件时,Intellisense不起作用
qmlRegisterSingletonType(QUrl(QLatin1String(“qrc:/GlobalSettings.qml”),“ncs.global”,1,0,“SingletonSettings”);
qqmlaplicationengine;
QQmlContext*ctxt=engine.rootContext();
//常规上下文属性,而不是单例。智能感知工作
ctxt->setContextProperty(“ownModel”,QVariant::fromValue(ownModel));
//将singleton注册为上下文属性,Intellisense不起作用
ctxt->setContextProperty(“globalControl”,QVariant::fromValue(globalControl.Get());
engine.load(QUrl(QLatin1String(“qrc:/main.qml”));
globalcontrol.h:
类全局控件:公共QObject,
{
Q_对象
Q_属性(QString backcolor READ backcolor NOTIFY backcolor changed)
....
公众:
全局控制(QObject*parent=nullptr);
QString backcolor()常量{return m_backcolor;}
....
enum按钮
{
设备启动时,
设备(IR),,
.....
};
Q_ENUM(恩布顿)
公众时段:
无效转换模式(int模式);
按下无效按钮(int按钮);
某些qml文件:
//这项实施工作:
纽扣{
物业估价员
id:ir
正文:qsTr(“IR”)
宽度:66*widthScaling
布局图1.5行:4
版面.栏目:1
fontColor:bIr?valueColor:textColor
再次点击:{
按下全局控制按钮(全局设备)
//这不起作用:
纽扣{
id:ir
正文:qsTr(“IR”)
宽度:66*widthScaling
布局图1.5行:4
版面.栏目:1
fontColor:bIr?valueColor:textColor
再次点击:{
按下全局控制按钮(全局控制设备)

解决方案或解决方法:

对于QML定义的单例,将生成的文件添加到Qt编译器QML库中

..\..\..\bin\qmlplugindump -relocatable ncs.global 1.0 > plugins.qmltypes

C++注册单元格,生成一个“普通类”的“假”指针。Re登记。从同一个单类中检索枚举,创建unCeCababyLype:

    GlobalControlSP globalControlOrig = GlobalControl::GetInstance();
    GlobalControl* globalControl = globalControlOrig.Get();
    ctxt->setContextProperty("globalControl", QVariant::fromValue(globalControl));
    qmlRegisterUncreatableType<GlobalControl>("ncs.global", 1, 0, "Global", "Singleton");
GlobalControlSP globalControlOrig=GlobalControl::GetInstance();
GlobalControl*GlobalControl=GlobalControl.Get();
ctxt->setContextProperty(“globalControl”,QVariant::fromValue(globalControl));
qmlregisteruncreateabletype(“ncs.global”,1,0,“global”,“Singleton”);

解决方案或解决方法:

对于QML定义的单例,将生成的文件添加到Qt编译器QML库中

..\..\..\bin\qmlplugindump -relocatable ncs.global 1.0 > plugins.qmltypes

C++注册单元格,生成一个“普通类”的“假”指针。Re登记。从同一个单类中检索枚举,创建unCeCababyLype:

    GlobalControlSP globalControlOrig = GlobalControl::GetInstance();
    GlobalControl* globalControl = globalControlOrig.Get();
    ctxt->setContextProperty("globalControl", QVariant::fromValue(globalControl));
    qmlRegisterUncreatableType<GlobalControl>("ncs.global", 1, 0, "Global", "Singleton");
GlobalControlSP globalControlOrig=GlobalControl::GetInstance();
GlobalControl*GlobalControl=GlobalControl.Get();
ctxt->setContextProperty(“globalControl”,QVariant::fromValue(globalControl));
qmlregisteruncreateabletype(“ncs.global”,1,0,“global”,“Singleton”);

<代码> >为什么不使用<代码> QyEnUn> /Cux>宏?(C++)来公开C++枚举,当通过CutExtTepe访问时,它不起作用。不是从Snutelon类中。如果我在另一个注册为CONTROWTHECT的类中实现,枚举值在QML中是自动建议的,但不起作用。我添加了QMLReistSype(“NCS.Global”)。,1,0,“全局”);并且它工作全局控制按钮按下(全局雷达)然后我使用同一个类中的enum Global.RADAR_IR传递给单例函数globalControl.buttonPressed。对我来说似乎不干净…你想如何通过contextProperty公开enum?你能显示你想公开的对象的代码吗?如果它能工作,当你注册为单例时,为什么不呢?你为什么不想公开ose它作为contextProperty?我添加了更多的代码片段。主要关注的不是枚举。主要关注的是缺少单例的自动完成。在谷歌搜索了更多的时间后,似乎在这个关注点中有报告的错误,设置为“已解决,无需实现”……例如,我可以使用单例作为类型吗?为什么不公开C++代码使用了<代码> QyEnUn> /Copy>宏?我在访问CONTEXT属性时不工作。不是从单级类中来的。如果我在另一个注册为CONTROWTHECT的类中实现,枚举值在QML中是自动建议的,但不起作用。我添加了一个qMLReistStpe(“NCS.Global”,1, 0,“Global”)。;并且它可以工作全球控制按钮按下(全球雷达)然后我使用同一个类中的enum Global.RADAR_IR传递给单例函数globalControl.buttonPressed。对我来说似乎不干净…你想如何通过contextProperty公开enum?你能显示你想公开的对象的代码吗?如果它能工作,当你注册为单例时,为什么不呢?你为什么不想公开是否将其作为contextProperty使用?我添加了更多的代码片段。主要关注的不是枚举。主要关注的是缺少单例的自动完成功能。在谷歌搜索了一段时间后,似乎出现了报告