Как сделать Q_PROPERTY в интерфейсе без наследования от QObject? Приветствую!
В общем очень хочется сделать, что бы можно было Q_PROPERY сигналы и слоты вынести в интерфейсы.
С сигналами и слотами проблем почти не возникло и вынеслись нормально,
а вот Q_PROPERTY не хочет.
А именно не хочет moс файл генерироваться, если нет Q_OBJECT или Q_GADGET
если прописывать, то Qt начинает ругаться, что класс должен быть унаследован от QObject.
Попробовал вручную внести правки в moc_*.cpp и удалось добиться нормальной работы Q_PROPERTY, но разумеется при перекомпиляции все изменения в moc файле вытираются и делать отдельный moc это по-моему адцкий костыль.
Наследовать интерфейс от QObject не вариант - в дальнейшем может быть множественное наследование и может получиться, что будет наследование от нескольких QObject, на что Qt будет ругаться матом.
Подскажите, как сделать так, что бы Q_PROPERTY можно было объявлять в интерфейсе? Либо может можно как-либо переопределить работу moc генератора(запретить генерирование staticMetaObject) без его пересборки из сырцов.

21 Авг 2019 в 07:02
209 +1
0
Ответы
1

К сожалению, Qt требует, чтобы класс с Q_PROPERTY был унаследован от QObject или Q_GADGET, чтобы правильно сгенерировать файл moc. Наследование интерфейса от QObject не является хорошим подходом из-за ограничения на множественное наследование от QObject, как вы верно отметили.

Если вы хотите избежать наследования от QObject, можно попробовать использовать другой подход, как например, создать отдельный класс с Q_PROPERTY и работать с ним через указатель или ссылку в ваших интерфейсах. Например, вы можете создать отдельный класс с Q_PROPERTY и передавать его в конструктор интерфейса, чтобы работать с его свойствами.

Также можно попробовать использовать Q_PROPERTY только в реализации класса, который унаследован от QObject, и передавать значения свойств через методы или другие способы в ваши интерфейсы.

Если вам действительно нужно использовать Q_PROPERTY в интерфейсе без наследования от QObject, то возможно вам придется прибегнуть к использованию сторонних библиотек или других методов для работы со свойствами в вашем приложении.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 017 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир