Ответы пользователя по тегу QML
  • Как в QML вывести svg с возможностью взаимодействия и стилизации?

    PavelK
    @PavelK
    Тынц: https://doc.qt.io/qt-5/qml-qtquick-shapes-shape.html (Через PathSvg можете вывести непосредственно сам путь из svg "" .
    Анимировать/изменять/взаимодействовать можно относительно легко.

    Но тут, как обычно, есть много НО:
    1. Вам придётся все стили: обводку, заливку, градиенты прописывать вручную у Shape (как в примере по ссылке)
    2. Взаимодействие - на Shape целиком. Нужно на отдельный путь - извольте его в отдельный Shape засунуть
    3. ТОРРРМОЗЗЗа, т.к. для ровности и плавности нужно выставлять layer.samples: 16 (минимум). Особенно заметно, если планируете под мобилки. Как статичный интерфейс ещё потянет, если Вы вдруг собрались его делать.
    4. Пляски с маштабированием и размерами (У Shape scale появился только с 5.12 вроде)
    5. Если у путей стоит какой transform (Иллюстратор его любит выставлять где не приколочено), то либо его то же прописываете (и увеличиваете тормоза), либо сразу применяете к path.d, но для этого придётся писать свой парсер (т.к. трансформации могут быть и на группе то же и на svg целиком), причём достаточно нефиговый - по себе знаю :D
    6. Далеко не все возможности SVG реализованы в явном виде. Некоторые поддаются "костылянию" (через ShaderEffects, либо через написание собственных фрагментных шейдеров в крайнем случае. Например - clipPath придётся делать через OpacityMask либо бить дизайнера, что бы обрезал сразу), что опять же увеличивает тормоза.

    Опишите для чего именно Вам нужно, подскажу конкретнее куда копать. Может проще вообще в сторону наследования от QQuciPaintedItem и всю работу доверить QSvgRenderer.
    Ответ написан
  • Адекватно ли делать интерфейс программы в coreldraw?

    PavelK
    @PavelK
    Имхо, лучше таки вместо картинок сделать нативными элементами либо svg. Потом с маштабированием в разы меньше проблем.

    Откуда заказчику знать, как вам подготовить графику то? У Вас есть исходник - можете экспортировать в другой векторный формат либо в png.

    Лично я наоборот требую только векторный исходник и из него уже собираю - так проще адаптировать и нет возни с обтравкой картинок, да и svg на лету поменять можно.
    Ответ написан
    Комментировать
  • QMap в QML как лучше всего сделать?

    PavelK
    @PavelK
    В общем случае, как уже посоветовали, создать свой собственный тип, но всё равно не получится с ним работать как с массивом m[4]=42; будет что-то вроде m.set(4,42); и к тому же опять придётся скорее всего писать "обёртки", либо перегружать оператор [] и так далее - в зависимости от Вашей ситуации.

    Вы можете работать как с обычным массивом через QList, но при этом будут особенности QList - если в QML сделать m[4]=42; то с 0 по 3 список будет заполнен нулями и, возможно, Вам придётся вносить ещё изменения в код для обхода этой особенности.

    Вообще, теоретически, можно унаследоваться от QVariant, перегрузив оператор = , что бы выполнить внутри преобразование QMap к QVariantMap , сложить всё это аккуратно в QVariant и перегрузить (), что бы выполнить обратное преобразование. Будет немного трудновато, но вполне возможно. Либо, возможно, заставить думать мета-систему Qt о QMap как о QVariant map.
    Ответ написан
    1 комментарий
  • Как работать в QML через интерфейс класса?

    PavelK
    @PavelK
    Вообще чисто теоретически это возможно, но с ограничениями из-за принципа метасистемы Qt, а именно она регистрирует каждый тип под своим номером, а потом, когда нужно, на основе этого номера создаёт сам экземпляр класса.
    То есть можно подменить, что бы при создании интерфейса создавать вместо него сам класс, но тогда вы не сможете использовать интерфейс "в прямом" его понимании, т.е. использовать множественное наследование, т.е. один класс, один его интерфейс всё. Хотя может быть да же и это можно обойти, если хорошо покопаться в метасистеме т.к. я внутренности смотрел не слишком пристально, но то, что возможно, это точно.

    UPDT1: Пардон, всё уже придумано до нас: pavelk.ru/ispolzovanie-interfejsov-klassov-v-qt-i-qml
    Ответ написан
    1 комментарий
  • Мёртв ли QML? Стоит ли забыть раз и навсегда о кроссплатформенных гибридных приложениях на Qt?

    PavelK
    @PavelK
    Занимаюсь гибридной. По-моему QML дорогое удовольствие (как стоимость часа разработчика) для простых интерфейсов и не столь популярен как раз из-за этого (готовые контролы по типу виджетов в нём появились относительно недавно, но досихпор сыроваты), а вот для кастомных: типо терминалов оплат, детских образовательных программулек и прочего он незаменим, а на такое и спроса гораздо меньше.
    Ответ написан
    Комментировать
  • Как сохранить текст новости в текстовый файл?

    PavelK
    @PavelK
    Напрямую из qml - никак, придётся Вам обращаться к c++.
    Пример класса есть тут.
    Ответ написан
    Комментировать
  • Submit формы в QML, как лучше это делать?

    PavelK
    @PavelK
    Оба Ваших подхода - костыли.

    Для этого есть Q_PROPERTY, если вкратце - наследуете Ваш класс от QObject, прописываете Q_PROPERTY, например field1, дальше в QML
    Item {
     id: myForm
      objectName: "myForm"
     property var formHandler;
     
     TextIntput {
        id: textInput1
       onEditingFinished: {
          formHandler.field1= textInput1.text; (textInput1 можно отбросить и написать просто text)
       }
     }
    }

    Находите через findChild "myForm", устанавливаете ему через QVariant::fromValue(myFormHandler) инстанс класса обработчика. Таким макаром при завершении редактирования текста Вы в c++ классе автоматически получаете актуальное значение. Дальше, для сохранения значений, например в базу, можете прописать в слотах какую-либо функцию, например saveForm(); и в QML по нажатию кнопки её вызывать: formHandler.saveForm(); и уже ничего ниоткуда собирать не надо - всё будет в прописанных Q_PROPERTY.

    P.S. Это лишь один из вариантов =)
    Ответ написан
    1 комментарий
  • Наложенная DropArea на DropArea не реагирует на события, как обойти?

    PavelK
    @PavelK Автор вопроса
    Так, этой баге уже 3й год пошел https://bugreports.qt.io/browse/QTBUG-36895
    Ответ написан
    Комментировать
  • Qt, QML Как вывести несколько VideoOutput?

    PavelK
    @PavelK Автор вопроса
    Это похоже баг. Актуально для Qt 5.7
    Ответ написан
    Комментировать
  • Как собрать плагин для QML?

    PavelK
    @PavelK
    Писал для себя и давненько, но вдруг заработает либо на мысль наведёт:
    pavelk.ru/pishem-rasshirenie-plugin-dlya-qml-qml-grid
    Ответ написан
    Комментировать
  • Сколько таймеров одновременно можно использовать в QML?

    PavelK
    @PavelK
    Вместо таймеров используйте события.
    В Qml практически всё биндятся... не знаю как по-русски, загуглите qml binding

    Если проверки необходимо сложные, то лучше перейти от реальных объектов к виртуальным
    т.е. создать какую либо карту например
    1111111
    1002001
    1000001
    1111111
    Где 2 - это Ваш объект.
    1- стена
    0 - пустое место
    Хоть двумерную, хоть трёхмерную.
    а потом просто событие генерируйте и взаимодействуйте с ним.
    Падение можно заменить на анимацию.

    Но лучше всего не использовать qml компоненты а рисовать это всё самостоятельно.
    Иначе 50 объектов и адцкие тормоза.
    Ответ написан
    2 комментария
  • Как добавить строки с прямоугольниками в QT (QML)?

    PavelK
    @PavelK
    Прочитайте: habrahabr.ru/post/181712
    Ответ написан
    Комментировать