暴露c++;QML的自定义类型 我有以下C++自定义对象,希望在QML使用为 EnUM < /C> >类型: #include <QtQml> #include <QApplication> #include <QQmlApplicationEngine> #include "database/uepeoplemodel.h" #include "core/uestatus.h" #include "core/uedatabaseconnectionstatus.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); QQmlApplicationEngine engine; UeStatus* ueApplicationStatus=new UeStatus(qApp); UePeopleModel* uePeopleModel=new UePeopleModel(qApp); QObject::connect(uePeopleModel, SIGNAL(ueSignalDatabaseConnectionChanged(UeDatabaseConnectionStatus::UeTypeDatabaseConnectionStatus)), ueApplicationStatus, SLOT(ueSignalDatabaseConnectionChanged(UeDatabaseConnectionStatus::UeTypeDatabaseConnectionStatus))); uePeopleModel->ueConnectToDatabase(); engine.rootContext()->setContextProperty("uePeopleModel", uePeopleModel); engine.rootContext()->setContextProperty("ueApplicationStatus", ueApplicationStatus); engine.addImageProvider(QLatin1String("uePeopleModel"), uePeopleModel); qmlRegisterUncreatableType<UeDatabaseConnectionStatus::UeTypeDatabaseConnectionStatus>("si.mikroelektronika", 1, 0, "UeTypeDatabaseConnectionStatus", "Database Connection Status"); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec(); } #包括 #包括 #包括 #包括“database/uepeoplemodel.h” #包括“core/uestatus.h” #包括“core/uedatabaseconnectionstatus.h” int main(int argc,char*argv[]) { QApplication应用程序(argc、argv); qqmlaplicationengine; UeStatus*ueApplicationStatus=新UeStatus(qApp); UePeopleModel*UePeopleModel=新的UePeopleModel(qApp); QObject::connect(uePeopleModel, 信号(ueSignalDatabaseConnectionChanged(UeDatabaseConnectionStatus::UeTypeDatabaseConnectionStatus)), UE应用程序状态, 插槽(ueSignalDatabaseConnectionChanged(UeDatabaseConnectionStatus::UeTypeDatabaseConnectionStatus)); uePeopleModel->ueConnectToDatabase(); engine.rootContext()->setContextProperty(“uePeopleModel”, 用户模型); engine.rootContext()->setContextProperty(“ueApplicationStatus”, UE(状态); engine.addImageProvider(QLatin1String(“uePeopleModel”), 用户模型); qmlregisteruncreateabletype(“si.mikrolektronika”, 1. 0, “UeTypeDatabaseConnectionStatus”, “数据库连接状态”); engine.load(QUrl(QStringLiteral(“qrc:/main.qml”)); 返回app.exec(); }
我在暴露c++;QML的自定义类型 我有以下C++自定义对象,希望在QML使用为 EnUM < /C> >类型: #include <QtQml> #include <QApplication> #include <QQmlApplicationEngine> #include "database/uepeoplemodel.h" #include "core/uestatus.h" #include "core/uedatabaseconnectionstatus.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); QQmlApplicationEngine engine; UeStatus* ueApplicationStatus=new UeStatus(qApp); UePeopleModel* uePeopleModel=new UePeopleModel(qApp); QObject::connect(uePeopleModel, SIGNAL(ueSignalDatabaseConnectionChanged(UeDatabaseConnectionStatus::UeTypeDatabaseConnectionStatus)), ueApplicationStatus, SLOT(ueSignalDatabaseConnectionChanged(UeDatabaseConnectionStatus::UeTypeDatabaseConnectionStatus))); uePeopleModel->ueConnectToDatabase(); engine.rootContext()->setContextProperty("uePeopleModel", uePeopleModel); engine.rootContext()->setContextProperty("ueApplicationStatus", ueApplicationStatus); engine.addImageProvider(QLatin1String("uePeopleModel"), uePeopleModel); qmlRegisterUncreatableType<UeDatabaseConnectionStatus::UeTypeDatabaseConnectionStatus>("si.mikroelektronika", 1, 0, "UeTypeDatabaseConnectionStatus", "Database Connection Status"); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); return app.exec(); } #包括 #包括 #包括 #包括“database/uepeoplemodel.h” #包括“core/uestatus.h” #包括“core/uedatabaseconnectionstatus.h” int main(int argc,char*argv[]) { QApplication应用程序(argc、argv); qqmlaplicationengine; UeStatus*ueApplicationStatus=新UeStatus(qApp); UePeopleModel*UePeopleModel=新的UePeopleModel(qApp); QObject::connect(uePeopleModel, 信号(ueSignalDatabaseConnectionChanged(UeDatabaseConnectionStatus::UeTypeDatabaseConnectionStatus)), UE应用程序状态, 插槽(ueSignalDatabaseConnectionChanged(UeDatabaseConnectionStatus::UeTypeDatabaseConnectionStatus)); uePeopleModel->ueConnectToDatabase(); engine.rootContext()->setContextProperty(“uePeopleModel”, 用户模型); engine.rootContext()->setContextProperty(“ueApplicationStatus”, UE(状态); engine.addImageProvider(QLatin1String(“uePeopleModel”), 用户模型); qmlregisteruncreateabletype(“si.mikrolektronika”, 1. 0, “UeTypeDatabaseConnectionStatus”, “数据库连接状态”); engine.load(QUrl(QStringLiteral(“qrc:/main.qml”)); 返回app.exec(); },c++,qt,qml,C++,Qt,Qml,我在Linux work002 3.19.0-28-generic#30 Ubuntu SMP Mon Aug 31 15:52:51 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux上遇到以下编译错误(使用gcc版本4.9.2): 在文件中包括从 /opt/QtOpenSource55/5.5/gcc_64/include/QtCore/qobject.h:40:0, 来自/opt/QtOpenSource55/5.5/gcc_64/include/QtCore/
Linux work002 3.19.0-28-generic#30 Ubuntu SMP Mon Aug 31 15:52:51 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux上遇到以下编译错误(使用gcc版本4.9.2
):
在文件中包括从
/opt/QtOpenSource55/5.5/gcc_64/include/QtCore/qobject.h:40:0,
来自/opt/QtOpenSource55/5.5/gcc_64/include/QtCore/qabstractanimation.h:37,
来自/opt/QtOpenSource55/5.5/gcc_64/include/QtCore/QtCore:4,
来自/opt/QtOpenSource55/5.5/gcc_64/include/QtQml/QtQmlDepends:3,
来自/opt/QtOpenSource55/5.5/gcc_64/include/QtQml/QtQml:3,
from../ueBlagajnaClient/main.cpp:1:/opt/QtOpenSource55/5.5/gcc_64/include/QtCore/qobjectdefs.h:88:5:
错误:类定义不能声明为友元
friend Q_DECL_CONSTEXPR const QMetaObject*qt_getEnumMetaObject(ENUM)Q_DECL_NOEXCEPT{return&staticMetaObject;}\
^../ueBlagajnaClient/database/。/core/uedatabaseconnectionstatus.h:17:5:
注意:在宏“Q_ENUM”的展开中
Q_枚举(UeTypeDatabaseConnectionStatus)
^/opt/QtOpenSource55/5.5/gcc_64/include/QtCore/qobjectdefs.h:88:35:
错误:“QMetaObject”既不是函数也不是成员函数;无法
交友
friend Q_DECL_CONSTEXPR const QMetaObject*qt_getEnumMetaObject(ENUM)Q_DECL_NOEXCEPT{return&staticMetaObject;}\
^../ueBlagajnaClient/database/。/core/uedatabaseconnectionstatus.h:17:5:
注意:在宏“Q_ENUM”的展开中
Q_枚举(UeTypeDatabaseConnectionStatus)
^/opt/QtOpenSource55/5.5/gcc_64/include/QtCore/qobjectdefs.h:88:35:
错误:在成员声明末尾应为“;”
friend Q_DECL_CONSTEXPR const QMetaObject*qt_getEnumMetaObject(ENUM)Q_DECL_NOEXCEPT{return&staticMetaObject;}\
^../ueBlagajnaClient/database/。/core/uedatabaseconnectionstatus.h:17:5:
注意:在宏“Q_ENUM”的展开中
Q_枚举(UeTypeDatabaseConnectionStatus)
^/opt/QtOpenSource55/5.5/gcc_64/include/QtCore/qobjectdefs.h:88:73:
错误:ISO C++禁止用“不”声明“qtyGETMeqMeta对象”
类型[-fpermissive]
friend Q_DECL_CONSTEXPR const QMetaObject qt_getEnumMetaObject(ENUM)Q_DECL_NOEXCEPT{return&staticMetaObject;}\
^
../ueBlagajnaClient/database/。/core/uedatabaseconnectionstatus.h:17:5:
注意:在宏“Q_ENUM”的展开中
Q_枚举(UeTypeDatabaseConnectionStatus)
^../ueBlagajnaClient/database/。/core/uedatabaseconnectionstatus.h:In
成员函数'int
UeDatabaseConnectionStatus::qt_getEnumMetaObject(UeDatabaseConnectionStatus::UeTypeDatabaseConnectionStatus)':
/opt/QtOpenSource55/5.5/gcc_64/include/QtCore/qobjectdefs.h:88:101:
错误:无法将“const QMetaObject*”转换为“int*”
friend Q_DECL_CONSTEXPR const QMetaObject qt_getEnumMetaObject(ENUM)Q_DECL_NOEXCEPT{return&staticMetaObject;}\
^
../ueBlagajnaClient/database/。/core/uedatabaseconnectionstatus.h:17:5:
注意:在宏“Q_ENUM”的展开中
Q_枚举(UeTypeDatabaseConnectionStatus)
^在/opt/QtOpenSource55/5.5/gcc_64/include/QtQml/QtQml:9:0中包含的文件中,
来自../ueBlagajnaClient/main.cpp:1:/opt/QtOpenSource55/5.5/gcc_64/include/QtQml/qqml.h:在实例化中
'int qmlregisteruncreateabletype(常量字符,int,int,常量字符*,
常量QString&[带T=
UeDatabaseConnectionStatus::UeTypeDatabaseConnectionStatus]':
../ueBlagajnaClient/main.cpp:35:120:此处为必填项
/opt/QtOpenSource55/5.5/gcc_64/include/QtQml/qqml.h:83:59:错误:
“staticMetaObject”不是的成员
'UeDatabaseConnectionStatus::UeTypeDatabaseConnectionStatus'
const char*className=T::staticMetaObject.className()\
^/opt/QtOpenSource55/5.5/gcc_64/include/QtQml/qqml.h:134:5:note:in
宏“QML\u GETTYPENAMES”的扩展
QML_GETTYPENAMES
^在文件i中
class UeTypeDatabaseConnectionStatus: public QObject
{
Q_OBJECT
public:
enum StatusEnum
{
NOT_CONNECTED=false,
CONNECTED=true
}
Q_ENUM(StatusEnum)
...
}
connectionProperty: UeTypeDatabaseConnectionStatus.CONNECTED;