Russian Qt Forum

Qt => Вопросы новичков => Тема начата: phpCoder от Январь 14, 2015, 22:35



Название: Сигналы и слоты
Отправлено: phpCoder от Январь 14, 2015, 22:35
Добрый вечер.
Есть базовый класс Base, в котором хочу сделать один сигнал и один слот.
Есть класс MyClass который наследник Base. В классе MyClass хочу сделать флаги, сигналы и слоты, а также пользоваться тем, что есть в классе Base.
Есть еще класс WidgetClass - наследник Qwidget (qframe... без разницы). Но он также и наследник Base.

Вопрос: как и что надо сделать, чтобы класс Base успешно наследовался, как обычными класса, там и теми классами, которые являются наследниками от qobject? Где нужно ставить Q_OBJECT, а где Q_GADGET?
Чтобы Qt не парил, что такой-то сигнал и слот не определены, qMetaObject не определен. Какая-нибудь хрень является ambigious. Чтобы не 'connect' was not declared in this scope.


Название: Re: Сигналы и слоты
Отправлено: Alex Custov от Январь 14, 2015, 23:01
двойное наследование от QObject не поддерживается.


Название: Re: Сигналы и слоты
Отправлено: phpCoder от Январь 14, 2015, 23:40
И что тогда?
В базовом классе нужно сделать сигнал и слот.

В таком случае двойное наследование от любого виджетоподобного класса не поддерживается.


Название: Re: Сигналы и слоты
Отправлено: kambala от Январь 15, 2015, 00:10
ну сделай через агрегацию вместо наследования, вот проблема-то


Название: Re: Сигналы и слоты
Отправлено: phpCoder от Январь 15, 2015, 09:37
Агрегацию чего?


Название: Re: Сигналы и слоты
Отправлено: torwig от Январь 15, 2015, 09:39
Имеется в виду чтобы один класс не наследовал другой, а содержал его в себе, чтобы второй класс был членом (одним из) первого


Название: Re: Сигналы и слоты
Отправлено: __Heaven__ от Январь 15, 2015, 09:50
А виртуальное наследование тут не подойдёт?


Название: Re: Сигналы и слоты
Отправлено: torwig от Январь 15, 2015, 20:04
А виртуальное наследование тут не подойдёт?
Alex Custov пишет, что
двойное наследование от QObject не поддерживается.


Название: Re: Сигналы и слоты
Отправлено: __Heaven__ от Январь 15, 2015, 20:50
Я, конечно, основываюсь на голой теории, но разве виртуальное наследование не подразумевает одинарное наследование?


Название: Re: Сигналы и слоты
Отправлено: Alex Custov от Январь 15, 2015, 20:58
Я, конечно, основываюсь на голой теории, но разве виртуальное наследование не подразумевает одинарное наследование?

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


Название: Re: Сигналы и слоты
Отправлено: Igors от Январь 16, 2015, 10:58
Я, конечно, основываюсь на голой теории, но разве виртуальное наследование не подразумевает одинарное наследование?
Так Вы не сможете его реализовать не покалечив исходников Qt, напр
Код:
class Q_WIDGETS_EXPORT QWidget : public QObject, public QPaintDevice
Нет удобного способа иметь "virtual public QObject"