Deerenaros
@Deerenaros
Программист, математик, задрот и даже чуть инженер

QtCreator + QML: не обновляет ресурсные файлы при (пере)сборке. Шо делать?

Доброго времени суток.

Собственно, уже недели две занимаюсь любовью с Qt + QML, в целом потрясающая вещь, всё что нужно есть и даже больше, к тому же кроссплатформа (критический критерий, андроид надо), но вот незадача. Так уж сложилось, что привык к vim или Visual Studio (лучшая IDE на сегодня). А вот QtCreator вещь в себе, вроде бы всё есть, что надо, а вроде бы и кусок понятно чего. Собственно, проблема в вопросе, причём проблема потрясающая, она плавает!

Итак, создаём пару файлов в QRC. Меняем их. Собираем, запускаем. Снова меняем. Собираем, запускаем. Есть разница? Вот незадача, нет разницы!

Это бесит настолько, что просто бесит. Гугление привело к двум тикетам на багборде, но они закрытые. Собственно, ладно если нет правильного решения, интересует возможность быстрого решения. Ведь сейчас чтобы запустить надо сначала запустить qmake, потом make clean, а потом make build. И только потом запускать. Собственно, работал бы под vim и клепай собственные скрипты, а вот нет, приходится насиловать шиндошс, а под ним vim не vim, скрипты не скрипты и вообще терминалов нет, так что нечего тут делать, а приходится. Как ни искал, в Qt не нашёл pre-build хуков, чтобы qmake принудительно туда запихать, а идеально было бы всё таки поправить этот баг.

Что примечательно, довольно длительное время всё было ок.

Профайл вот он.
QT += charts qml quick serialport network

SOURCES += main.cpp \
    devicesmodel.cpp \
    device.cpp

RESOURCES += \
    qml.qrc

HEADERS += \
    devicesmodel.h \
    device.h \
    betterdebug.h

DISTFILES += Amplifier.qml \
    DevicesList.qml \
    DevicesView.qml \
    FDR.qml \
    main.qml \
    NLD.qml \
    OffMode.qml \
    Oscilloscope.qml \
    Receiver.qml \
    Settings.qml \
    Switcher.qml \
    SwitchItem.qml


Одно дело было всё хорошо, потом всё стало плохо, починилось принудительным внесением в DISTFILES все qml. А потом снова всё плохо. Порядком надоело.
  • Вопрос задан
  • 795 просмотров
Решения вопроса 1
Deerenaros
@Deerenaros Автор вопроса
Программист, математик, задрот и даже чуть инженер
Воспользовался решением Алексей, ибо оно избавляет от убогого makefile, давая наибольший контроль над проектом. Ещё не всё работает идеально, но уже сейчас можно вполне работать. К слову, Qt уже умеет создавать QBS-проекты, правда для этого придётся выбрать нелогичный проект без Qt
724091ad98754fc6a82985d46473e921.png5e846094818643228ac32cec0233d374.png
Чтобы использовать Qt потребуется добавить в зависимости его модуль и необходимые подмодули, пример *.qbs файла чуть ниже:
import qbs

CppApplication {
    files: [
        "include/betterdebug.h",
        "include/device.h",
        "include/devicesmodel.h",
        "main.cpp",
        "qml.qrc",
        "resources/Amplifier.qml",
        "resources/DeviceView.qml",
        "resources/DevicesList.qml",
        "resources/FDR.qml",
        "resources/NLD.qml",
        "resources/OffMode.qml",
        "resources/Oscilloscope.qml",
        "resources/Receiver.qml",
        "resources/Settings.qml",
        "resources/SwitchItem.qml",
        "resources/Switcher.qml",
        "resources/main.qml",
        "source/device.cpp",
        "source/devicesmodel.cpp",
    ]

    Depends {
        name: "Qt"
        submodules: ["charts", "qml", "quick", "serialport", "network"]
    }

    Depends {
        name: "cpp"
    }

    Group {
        fileTagsFilter: product.type
        qbs.install: true
    }

    cpp.includePaths: ["./include"]
}


В общем и целом, это потрясающая штука, надеюсь на дальнейшее развитие. В этом плане мы получили приятнейшую сборку на уровне Visual Studio, но при этом с полным контролем и QML языком, в котором можно Тьюринг полный JavaScript без всяких хитростей. Больше информации можно найти здесь

Благодарю Яков Е и Алексей за помощь.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Zifix
@Zifix
Barbatum
Стоп-стоп. Для того чтобы появились изменения qrc надо иногда заморачиваться только после добавления новых файлов, при изменениях внутри файлов — обычно ничего делать не надо. Если при обновлении файла ресурсов, в каких-то исключительных случаях он не ребилдится сам, достаточно снести cpp файл из каталога сборки в все опять станет хорошо.

Ну а что касается костылей, так у гугла их сколько угодно, за две недели уж можно было найти stackoverflow.com/questions/12873437/force-qtcreat...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы