如何在Qt .js文件中使用C ++枚举?

时间:2019-06-12 14:43:00

标签: c++ qt qml qt-quick

我需要为多个QML文件创建一个具有多个共享功能的文件。

我试图创建一个.js文件,但似乎C ++枚举在这里不起作用。 FileSystemModel.TYPE_DIR在这里未定义,而在QML中,import FileSystemModel 1.0之后可以正常使用

.pragma library

.import FileSystemModel 1.0 as FileSystemModel

function fsItemTypeToImage(type) {
    console.log(FileSystemModel.TYPE_DIR)
    switch (type) {
    case FileSystemModel.TYPE_DIR:
        return "/img/dir.png"
    case FileSystemModel.TYPE_FILE:
        return "/img/file.png" 
    }
    return null
}

FileSystemModel.h:

class FileSystemModel : public QAbstractListModel {
    Q_OBJECT 
public:
    enum Roles { NameRole = Qt::UserRole + 1, SizeRole, DateRole, TypeRole };

    enum ItemType {
        TYPE_UNKNOWN = 0,
        TYPE_FILE,
        TYPE_DIR, 
    };
    Q_ENUM(ItemType)

main.cpp中的注册:

qmlRegisterType<FileSystemModel>("FileSystemModel", 1, 0, "FileSystemModel");

1 个答案:

答案 0 :(得分:3)

当您调用qmlRegisterType<FileSystemModel>("FileSystemModel", 1, 0, "FileSystemModel")时,您正在注册一个包含FileSystemModel类型的FileSystemModel QML模块,因此在您的js中,当您编写.import FileSystemModel 1.0 as FileSystemModel时,您实际上并不是导入您的类型但QML模块,这就是为什么它不起作用的原因。

在您的js文件中,尝试将FileSystemModel.TYPE_DIR更改为FileSystemModel.FileSystemModel.TYPE_DIR,这应该可以解决问题。