Russian Qt Forum
Ноябрь 23, 2024, 06:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сигналы и слоты  (Прочитано 5406 раз)
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.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Январь 14, 2015, 23:01 »

двойное наследование от QObject не поддерживается.
Записан
phpCoder
Гость
« Ответ #2 : Январь 14, 2015, 23:40 »

И что тогда?
В базовом классе нужно сделать сигнал и слот.

В таком случае двойное наследование от любого виджетоподобного класса не поддерживается.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Январь 15, 2015, 00:10 »

ну сделай через агрегацию вместо наследования, вот проблема-то
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
phpCoder
Гость
« Ответ #4 : Январь 15, 2015, 09:37 »

Агрегацию чего?
Записан
torwig
Самовар
**
Offline Offline

Сообщений: 134



Просмотр профиля
« Ответ #5 : Январь 15, 2015, 09:39 »

Имеется в виду чтобы один класс не наследовал другой, а содержал его в себе, чтобы второй класс был членом (одним из) первого
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #6 : Январь 15, 2015, 09:50 »

А виртуальное наследование тут не подойдёт?
Записан
torwig
Самовар
**
Offline Offline

Сообщений: 134



Просмотр профиля
« Ответ #7 : Январь 15, 2015, 20:04 »

А виртуальное наследование тут не подойдёт?
Alex Custov пишет, что
двойное наследование от QObject не поддерживается.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #8 : Январь 15, 2015, 20:50 »

Я, конечно, основываюсь на голой теории, но разве виртуальное наследование не подразумевает одинарное наследование?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #9 : Январь 15, 2015, 20:58 »

Я, конечно, основываюсь на голой теории, но разве виртуальное наследование не подразумевает одинарное наследование?

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

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Январь 16, 2015, 10:58 »

Я, конечно, основываюсь на голой теории, но разве виртуальное наследование не подразумевает одинарное наследование?
Так Вы не сможете его реализовать не покалечив исходников Qt, напр
Код:
class Q_WIDGETS_EXPORT QWidget : public QObject, public QPaintDevice
Нет удобного способа иметь "virtual public QObject"
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.067 секунд. Запросов: 23.