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

How to use C++ enum in Qt .js file?

我需要为多个 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");

当您调用 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,这应该可以解决问题。