Название: [Решено] Множественное наследование и слоты Отправлено: surendil от Июнь 21, 2011, 18:19 Я попробовал написать так:
Код
и... Код
В итоге я получил: Код: Warning: Class SceneView inherits from two QObject subclasses PPIDisplay and QGraphicsView. This is not supported! Что мне делать? :'( Название: Re: Множественное наследование и слоты Отправлено: Igors от Июнь 21, 2011, 18:33 Простой ответ "так нельзя" - как и написал Вам компилятор. Но интересно проверить так:
Код
Название: Re: Множественное наследование и слоты Отправлено: surendil от Июнь 21, 2011, 18:56 Простой ответ "так нельзя" - как и написал Вам компилятор. Но интересно проверить так: Код
Я попробовал, так тоже не работает :) В Википедии (http://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) написано, что проблема решается так: Код
Но ведь мне неподвластно "подправить" QGraphicsView? Название: Re: Множественное наследование и слоты Отправлено: GreatSnake от Июнь 21, 2011, 19:11 Простой ответ "так нельзя" - как и написал Вам компилятор. Но интересно проверить так: В самой ОО модели Qt запрещено множественное наследование от QObject.Код
Название: Re: Множественное наследование и слоты Отправлено: surendil от Июнь 21, 2011, 19:38 Прошу прощения, я очень сильно ошибся: мне нужно наследовать не от QGraphicsView, а от QGraphicsScene.
QGaphicsScene унаследован от QObject, но следующее -- если не работает, то по крайней мере компилируется. Не должно ведь, правда? :) Код
Код
Название: Re: Множественное наследование и слоты Отправлено: Igors от Июнь 21, 2011, 20:21 QGaphicsScene унаследован от QObject, но следующее -- если не работает, то по крайней мере компилируется. Не должно ведь, правда? :) Не должно. Абстрактный класс PPIDisplay имеет неабстрактные члены унаследованные от QObject, значит результатом должно быть множественное наследование от QObject которое (как нас уверяют) невозможноНазвание: Re: Множественное наследование и слоты Отправлено: GreatSnake от Июнь 21, 2011, 21:12 QGaphicsScene унаследован от QObject, но следующее -- если не работает, то по крайней мере компилируется. Не должно ведь, правда? :) Не должно. Абстрактный класс PPIDisplay имеет неабстрактные члены унаследованные от QObject, значит результатом должно быть множественное наследование от QObject которое (как нас уверяют) невозможноНазвание: Re: Множественное наследование и слоты Отправлено: surendil от Июнь 21, 2011, 21:30 Невозможно не сточки зрения С++, а иерархической модели Qt. Я правильно вас понимаю, что у меня сама идея изначально неправильная и отсюда косяки? Название: Re: Множественное наследование и слоты Отправлено: Пантер от Июнь 21, 2011, 21:40 Типа того.
Название: Re: Множественное наследование и слоты Отправлено: surendil от Июнь 21, 2011, 21:47 Типа того. Как быть? Я хотел сделать абстрактный класс, чтобы обязать его наследников реализовать необходимые слоты... а слоты, насколько мне известно, можно делать только в наследниках QObject (и с макросом Q_OBJECT). Название: Re: Множественное наследование и слоты Отправлено: Igors от Июнь 21, 2011, 21:48 Невозможно не сточки зрения С++, а иерархической модели Qt. Ну наверное MOC-компилятору будет затруднительно собрать воедино слоты/сигналы из разных базовых классов - отсюда и "иерархическая модель" и все такое :)Я правильно вас понимаю, что у меня сама идея изначально неправильная и отсюда косяки? Я бы так себя не ругал но цель лучше поменять. Допустим это было бы возможно - и что? Имели бы только массу (ненужных) забот - поди разберись который из базовых классов должен получать сигнал. Проще по-народному сделать указатель на PPIDisplay членом класса SceneDisplay и пусть SceneDisplay получает сигналы и отдает их на обработку PPIDisplay (членство вместо наследования). "Отношения" между этими 2-мя классами можно оформить в виде интерфейсов которые включить уже множественным наследованием.Название: Re: Множественное наследование и слоты Отправлено: surendil от Июнь 21, 2011, 21:57 Я бы так себя не ругал но цель лучше поменять. Допустим это было бы возможно - и что? Имели бы только массу (ненужных) забот - поди разберись который из базовых классов должен получать сигнал. Проще по-народному сделать указатель на PPIDisplay членом класса SceneDisplay и пусть SceneDisplay получает сигналы и отдает их на обработку PPIDisplay (членство вместо наследования). "Отношения" между этими 2-мя классами можно оформить в виде интерфейсов которые включить уже множественным наследованием. Проблема определения получателя сигнала встаёт ведь когда есть одинаковые слоты, правильно? У меня они вряд ли будут повторяться: то, что находится в PPIDisplay, фактически, являются командами "нарисуй это здесь", а SceneDisplay должен реализовать эти отрисовки на сцене. Какой-нибудь PainterDisplay -- с помощью QPainter (в этом, собственно, и весь смысл поставленной мне задачи). Про ваше предложение не понял, разжуйте пожалуйста.. :-[ Название: Re: Множественное наследование и слоты Отправлено: surendil от Июнь 21, 2011, 23:32 Проблема решена. SceneDisplay стал наследником PPIDisplay и получил возможность участвовать в обмене сигналами, кроме того в него попали и виртуальные слоты, как мне и хотелось. QGraphicsScene я сделал атрибутом класса SceneDisplay, думаю, это нормально (по сравнению со множественным наследованием).
Код
Код
|