Russian Qt Forum
Ноябрь 23, 2024, 06:27
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Сигналы и слоты
Страниц: [
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
Сообщений: 2063
Re: Сигналы и слоты
«
Ответ #1 :
Январь 14, 2015, 23:01 »
двойное наследование от QObject не поддерживается.
Записан
phpCoder
Гость
Re: Сигналы и слоты
«
Ответ #2 :
Январь 14, 2015, 23:40 »
И что тогда?
В базовом классе нужно сделать сигнал и слот.
В таком случае двойное наследование от любого виджетоподобного класса не поддерживается.
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Сигналы и слоты
«
Ответ #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
Гость
Re: Сигналы и слоты
«
Ответ #4 :
Январь 15, 2015, 09:37 »
Агрегацию чего?
Записан
torwig
Самовар
Offline
Сообщений: 134
Re: Сигналы и слоты
«
Ответ #5 :
Январь 15, 2015, 09:39 »
Имеется в виду чтобы один класс не наследовал другой, а содержал его в себе, чтобы второй класс был членом (одним из) первого
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Сигналы и слоты
«
Ответ #6 :
Январь 15, 2015, 09:50 »
А виртуальное наследование тут не подойдёт?
Записан
torwig
Самовар
Offline
Сообщений: 134
Re: Сигналы и слоты
«
Ответ #7 :
Январь 15, 2015, 20:04 »
Цитата: __Heaven__ от Январь 15, 2015, 09:50
А виртуальное наследование тут не подойдёт?
Alex Custov
пишет, что
Цитата: Alex Custov от Январь 14, 2015, 23:01
двойное наследование от QObject не поддерживается.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Сигналы и слоты
«
Ответ #8 :
Январь 15, 2015, 20:50 »
Я, конечно, основываюсь на голой теории, но разве виртуальное наследование не подразумевает одинарное наследование?
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Сигналы и слоты
«
Ответ #9 :
Январь 15, 2015, 20:58 »
Цитата: __Heaven__ от Январь 15, 2015, 20:50
Я, конечно, основываюсь на голой теории, но разве виртуальное наследование не подразумевает одинарное наследование?
Я подозреваю что из-за виртуального наследования второй класс-наследник QObject будет лишён метаинформации, следовательно сигналы-слоты для него работать не будут.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сигналы и слоты
«
Ответ #10 :
Январь 16, 2015, 10:58 »
Цитата: __Heaven__ от Январь 15, 2015, 20:50
Я, конечно, основываюсь на голой теории, но разве виртуальное наследование не подразумевает одинарное наследование?
Так Вы не сможете его реализовать не покалечив исходников Qt, напр
Код:
class Q_WIDGETS_EXPORT QWidget : public QObject, public QPaintDevice
Нет удобного способа иметь "virtual public QObject"
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...