Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/55: Рейтинг темы: голосов - 55, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 137

Наследование классов и QObject

16.02.2015, 12:12. Показов 10899. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть три класс и вот такое наследование

C++ (Qt)
1
2
3
4
5
WindowTemplate: public QObject
 
MainWindow: public WindowTemplate, public QMainWindow
 
WindowCamView: public WindowTemplate, public QWidget
при таком наследовании выдает ошибки на подобные строки (mainWin - экземпляр MainWindow):

C++ (Qt)
1
connect(mainWin, SIGNAL(deleteSession()), this, SLOT(deleteSession()));
Ошибка
error: 'QObject' is an ambiguous base of 'MainWindow'

Помогите решить, пожалуйста
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.02.2015, 12:12
Ответы с готовыми решениями:

Наследование QObject
Здравствуйте. Столкнулся с такой проблемой: Сейчас учу слоты и сигналы и вот хочу создать класс наследуемый от QObject, но компилятор...

Экспорт QObject классов и сигналы
Есть библиотека виджетов, возьмем один из них, реализован примерно так: class WIDGET_EXPORT MyComboBox : public QWidget { ...

Как написать конструктор от двух классов QObject и QAbstractNativeEventFilter
Всем привет! Новичок:) Пытаюсь написать прогу для определения подключившегося устройства юсб. Создал свой класс: class...

12
Pied Piper
 Аватар для ArmanPrestige
237 / 228 / 57
Регистрация: 15.01.2013
Сообщений: 855
16.02.2015, 12:37
Класс должен наследовать QObject только 1 раз. А у вас WindowCamView делает это 2 раза. Так же, будет лучше наследовать класс QMainWindow первым, так как он наследуется от QObject

C++ (Qt)
1
MainWindow: public QMainWindow, public WindowTemplate
0
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 137
16.02.2015, 12:41  [ТС]
не помогло(
0
Pied Piper
 Аватар для ArmanPrestige
237 / 228 / 57
Регистрация: 15.01.2013
Сообщений: 855
16.02.2015, 12:43
Что именно не помогло?
0
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 137
16.02.2015, 12:44  [ТС]
сделал так
C++ (Qt)
1
2
3
4
5
WindowTemplate: public QObject
 
MainWindow: public QMainWindow, public WindowTemplate
 
WindowCamView: public WindowTemplate
не помогло
0
Pied Piper
 Аватар для ArmanPrestige
237 / 228 / 57
Регистрация: 15.01.2013
Сообщений: 855
16.02.2015, 12:47
Я еще писал

Цитата Сообщение от ArmanPrestige Посмотреть сообщение
Класс должен наследовать QObject только 1 раз. А у вас WindowCamView делает это 2 раза.
0
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 137
16.02.2015, 12:54  [ТС]
почему снова 2? я же переделал, WindowCamView: public WindowTemplate
0
Pied Piper
 Аватар для ArmanPrestige
237 / 228 / 57
Регистрация: 15.01.2013
Сообщений: 855
16.02.2015, 12:55
класс MainWindow наследует QObject два раза. Первый раз от QMainWindow, второй раз от WindowTemplate.
0
0 / 0 / 0
Регистрация: 13.01.2015
Сообщений: 137
16.02.2015, 13:11  [ТС]
А каким образом это можно исправить? может при коннекте можно как то указать из какого именно QObjecta брать connect.
0
Pied Piper
 Аватар для ArmanPrestige
237 / 228 / 57
Регистрация: 15.01.2013
Сообщений: 855
16.02.2015, 14:08
Исправить можно наследовав QObject только один раз.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.02.2015, 14:17
Цитата Сообщение от tohtarov_ufa Посмотреть сообщение
А каким образом это можно исправить? может при коннекте можно как то указать из какого именно QObjecta брать connect.
Виртуальное наследование

Но такие ситуации стоит сразу избегать по возможности (сводить к одиночному наследованию или компоновке классов)

C++ (Qt)
1
2
3
WindowTemplate:  public QMainWindow;
 
WindowCamView: public WindowTemplate;
0
Pied Piper
 Аватар для ArmanPrestige
237 / 228 / 57
Регистрация: 15.01.2013
Сообщений: 855
16.02.2015, 14:19
Avazart, разве в данном случае это поможет?
If you are using multiple inheritance, moc assumes that the first inherited class is a subclass of QObject. Also, be sure that only the first inherited class is a QObject.
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
16.02.2015, 14:53
Лучший ответ Сообщение было отмечено tohtarov_ufa как решение

Решение

если я правильно помню, Qt не позволяет резолвить множественное наследование от QObject, да же вируальным наследованием. Так-что меняйте архитектуру....
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.02.2015, 14:53
Помогаю со студенческими работами здесь

Выполнение "non QObject" классов в отдельном потоке
Есть класс qObjClass_1, унаследованный от QObject. Данный класс имеет включенные в него простые (не унаследованные от QObject) классы...

Наследование классов
Помогите разобраться, пишет call to constructor of 'Abitur' is ambiguos,подскажите,как исправить #ifndef ABITUR_H #define ABITUR_H ...

Передача данных вверх по ветке классов (не наследование)
Добрый день. Пишу программу на QT, которая должна создавать Сцену. У сцены (или карты) есть координаты. Чтобы не хранить абсолютно все...

Автоматическая генерация классов С ++ с UML диаграмм классов. Наследование в с++. Абстрактные классы. WhiteStarUML
Создать классовую модель(желательно в WhiteStarUML), которая включает в себя абстрактный класс CGraphicsObject, его наследник - базовый...

Заменить наследование классов на наследование интерфейсов
#include <iostream> #include <assert.h> using namespace std; int people_on_base = 100; int vehicles_on_base = 100; double...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru