我需要为多个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");
答案 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
,这应该可以解决问题。