Как использовать перечисление C ++ в файле Qt .js? - PullRequest
3 голосов
/ 12 июня 2019

Мне нужно создать файл с несколькими общими функциями для нескольких файлов 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 Ответ

3 голосов
/ 12 июня 2019

Когда вы звоните qmlRegisterType<FileSystemModel>("FileSystemModel", 1, 0, "FileSystemModel"), вы регистрируете модуль FileSystemModel QML, который имеет тип FileSystemModel, поэтому в вашем js, когда вы пишете .import FileSystemModel 1.0 as FileSystemModel, вы фактически не импортируете свой тип, а модуль QML, вот почему это не работает.

В вашем js-файле попробуйте изменить FileSystemModel.TYPE_DIR на FileSystemModel.FileSystemModel.TYPE_DIR, что должно сработать.

...