• 4068阅读
  • 3回复

导入到qml中的枚举是否不可以有命名空间 [复制链接]

上一主题 下一主题
离线zerogex
 

只看楼主 倒序阅读 楼主  发表于: 2015-09-19
如下所示定义的枚举 SPC::Klass::Type, 在QML中调用createObject()时,报错不知道参数 SPC::Klass::Type是什么,请问枚举要想导入QML是不是不能带名字空间?
namespace SPC {
     class Klass : public QObject
     {
Q_OBJECT
Q_EMUS(Type)
     public:
enum Type
{
      type1
}

Q_INVOKABLE Q_QObject * createObject(SPC::Klass::Type type) {...}
     }
}


离线zerogex

只看该作者 1楼 发表于: 2015-09-20
没有人这样用过吗?
离线toby520

只看该作者 2楼 发表于: 2015-09-22
普通的类的枚举 是可以在QML中使用的,带有命名空间的没有试过,或者也是可以的

类似
#include <QtCore>

class DeviceModel: public QObject {
    Q_OBJECT
    Q_ENUMS(DeviceModelEnum)

public:
    enum DeviceModelEnum {
        Z10 = 1, Q10 = 2, Q5 = 3
    };
};

加载qml的地方
#include <devicemodel.hpp>
qmlRegisterType<DeviceModel>("ekkes_enums", 1, 0, "DeviceModel");


qml中:
import ekkes_enums 1.0

Page {
    Container {
        DropDown {
            Option {
                text: "Z10"
                value: DeviceModel.Z10
            }
            Option {
                text: "Q10"
                value: DeviceModel.Q10
            }
            Option {
                text: "Q5"
                value: DeviceModel.Q5
            }
            onSelectedIndexChanged: {
                deviceLabel.deviceModel = selectedValue
            }
        }
        Label {
            text: "Hello ENUM"
            textStyle.base: SystemDefaults.TextStyles.BigText
        }
        Label {
            text: "please select from DropDown"
            textStyle.base: SystemDefaults.TextStyles.SmallText
        }
        Label {
            id: deviceLabel
            property int deviceModel
            onDeviceModelChanged: {
                switch (deviceModel){
                    case DeviceModel.Z10:
                        text = "Touch Device"
                        break
                    case DeviceModel.Q10:
                    case DeviceModel.Q5:
                        text = "Keyboard Device"
                        break
                    default:
                        text = "unknown"
                }
            }
        }
    }
    onCreationCompleted: {
        console.debug("Enum value "+ DeviceModel.Q10)
        deviceLabel.deviceModel = -1
    }
}
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
离线zerogex

只看该作者 3楼 发表于: 2015-09-24
不加命名空间的确可以,加了qml就认不出来了,用整形数可以处理,不知道qt官方是否会改进
快速回复
限100 字节
 
上一个 下一个