QML_IMPORT_NAME кажется неизвестной переменной, модуль qml не найден

#qt #qml

#qt #qml

Вопрос:

Я пытаюсь запустить этот пример с qt 5.15.1

Когда я объявляю QML_IMPORT_NAME, переменная кажется неизвестной из qt (см. Цвет шрифта на скриншоте ниже), и когда я импортирую «com.mycompany.messaging» в свой файл qml, у меня появляется ошибка «Модуль QML не найден».

Редактировать: после некоторых исследований код выполняется так, как должен, но у меня есть эта ошибка в Qt Creator. Если я хочу отредактировать файл qml с помощью редактора графического интерфейса, мне нужно закомментировать весь код, связанный с серверной частью, в текстовом режиме, прежде чем в противном случае файл не удастся открыть.

В чем хитрость?

введите описание изображения здесь

Комментарии:

1. Вы добавили макрос QML_ELEMENT (или аналогичный) к типу C ?

2. Да. : class UiBackend : public QObject { Q_OBJECT Q_PROPERTY(QString userName ЧТЕНИЕ имени пользователя ЗАПИСЬ setUserName УВЕДОМЛЕНИЕ имени пользователя ИЗМЕНЕНО) QML_ELEMENT public:

3. Пример работает для меня. Вы сказали, что используете «qt 15.1», что, я полагаю, является опечаткой и что вы на самом деле используете 5.15.1? Вы запускали qmake и перестраивали после внесения изменений?

4. Да, правильно 5.15.1, я делал qmake и перестраивал много раз …. : (

5. Можете ли вы сказать мне, окрашен ли QML_IMPORT_CONFIG в вашем файле pro?

Ответ №1:

При этом я предположил, что должен был добавить

 CONFIG  = qmltypes
  

в файл .pro. Но поскольку я переключился на cmake и не нашел эквивалента, поэтому я использовал старый метод с:

 qmlRegisterType<Person>("People", 1,0, "Person");
  

в main.cpp (см. Ссылку выше).

Ответ №2:

Это известная ошибка, которая еще не исправлена (https://bugreports.qt.io/browse/QTCREATORBUG-24987 ).

Причина ошибки в том, что QtCreator требует сгенерированного .qmltypes и metatypes.json файлы рядом с двоичным файлом приложения.

Обходным путем для этого является добавление следующего в ваш файл pro:

 CONFIG(debug, debug|release) { 
    EXE_DIR = $${OUT_PWD}/debug
} else { 
    EXE_DIR = $${OUT_PWD}/release
} 

CONFIG  = file_copies 
COPIES  = qmltypes metatypes 

qmltypes.files = $$files($${OUT_PWD}/$${TARGET}.qmltypes)
qmltypes.path = $${EXE_DIR} 

metatypes.files = $$files($${OUT_PWD}/$${TARGET}_metatypes.json)
metatypes.path = $${EXE_DIR}