Как сделать 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
248 +1
0
Ответы
1

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

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

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

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

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир