2013-10-11 4 views
6

С Exposing Attributes of C++ Types to QML классы, используемые с QML, должны быть QObject s. Любой шанс, который я могу использовать, не QObjects s (aka POCO, не получен из QObject, но зарегистрирован в метасистеме Qt)?Любой шанс использовать классы без QObject с QML

Если нет, существует ли простая общая система упаковки, чтобы мои объекты соответствовали QML. Я могу думать о том, чтобы добавить динамические свойства к простому QObject.

Или есть способ неявно преобразовать в QML-совместимый тип, чтобы мне вообще не нужно было обертывать?

+0

Спасибо за выживание! Вы были на Qt DevDays'13, возможно, на прошлой неделе (в Берлине)? Тогда мы могли бы встретиться! – mlvljr

+0

Спасибо за всесторонний ответ. Я оставлю вопрос открытым еще на несколько дней, но потом, скорее всего, приму ваш ответ. Я не был в Берлине, кстати. –

+0

Спасибо, моя почта находится в профиле, и я действительно чувствую, что пытаюсь немного поэкспериментировать с этим (если я получу достаточно времени); поэтому, если хотите, мы можем попробовать что-то.Берлинское мероприятие было приятным :) – mlvljr

ответ

2

Это на самом деле одна горячая тема.

Я считаю, что вы можете зарегистрировать свои собственные POD и передать их вокруг ito и внутри QML-стороны (так же, как черные ящики - без доступа к любому члену, никогда не пробовали это). Чтобы получить доступ к элементам, можно использовать некоторый код обложки get/set, либо в виде методов на однояйцевом QML, либо на потомке QtObject, эффективно выступающем в качестве обертки для каждого экземпляра.

Динамические свойства в настоящее время не поддерживаются - вы можете заставить их работать, возможно, с довольно странным обманом, но это, вероятно, не стоит (но если вы не хотите, чтобы связывали с недвижимостью, намного проще, и все равно будут QObjects).

Неявное преобразование означало бы наличие своего рода препроцессора (возможно, это было бы возможно, но стоило бы много времени и суде, чтобы вернуть результат обратно в Qt (и поддерживать его на всю жизнь)).

Я бы так:

  • , если объекты в вопросе могут быть объектами QObject, измерить производительность (и если это нормально, придерживайтесь его)
  • если нет, то попытка прохождения непрозрачных стручков по значению , если это работает, создайте защитные леса и посмотрите, быстрее ли это/улучшает использование памяти, чем предыдущий вариант.
  • Если привязки к свойствам не требуются, и требуется динамизм, изучите a) вложенные QVariants b) свойства динамического QObject
  • если требования к экстремальной скорости/памяти должны быть выполнено, рассмотреть написание инструмента, который автоматически генерирует обертки и закреплять его в сборках трубопровода проекта Qt

Дело в том, пользовательских стручках не пользуются таким же уровнем поддержки встроенных сделать, и стандартная практика языка строится вокруг манипулируя мусор собранных экземпляров QObject (переданных везде по указателю, конечно), которые смотрели в обмен на изменения свойств типов:

  • СТРУЧОК
  • список
  • QObject
  • вариант (не отслеживается для изменений членов, iirc)
Смежные вопросы