Название: Виджеты на QGraphicsScene Отправлено: Fregloin от Май 05, 2011, 11:29 На сцене нужно отобразить кучу itemов (в основном полигоны, линии, круги и прочее, наследованы от QGraphicsItem).
Теперь возникла задача, на этой же сцене отображать виджеты (QLCDNumber, QListWidget, QPushButton). С отображением через addWidget проблем нет. Но виджет, который добавился на сцену не передвигается мышью, как например другие элементы, которые наследованы от QGraphicsItem. И еще впорос: Если я в наследнике QGraphicsItem (назевоем его QRailItem), добавил поля (qint32 objectType, и прочее ...), потом от QRailItem тоже наследуется много классов. Мне нужно что бы виджеты, которые добавляются на сцену тоже были наследниками QRailItem, или имели такие же поля как в QRailItem. Как сделать? Догадываюсь про множественное наследование, но пока еще не пойму как конкретно. Вот частичное описание класса QRailItem, от которого наследуются все классы отображаемых элементов на сцене Код: class QRailItem : public QObject, public QGraphicsItem Подозреваю что виджеты мне надо наследовать так? Код: class QRailItem : public QLCDNumber, public QGraphicsWidget Или вынести их все в отдельный класс, и множественным наследованием получить их уже в QRailItem и наследнике QGraphicsWidget? Название: Re: Виджеты на QGraphicsScene Отправлено: Fregloin от Май 05, 2011, 11:43 Код: #include <QLCDNumber> При компиляции ругается Error: Undefined interface Название: Re: Виджеты на QGraphicsScene Отправлено: GreatSnake от Май 05, 2011, 12:39 Цитировать Подозреваю что виджеты мне надо наследовать так? Нет не так. В Qt позволительно множественное наследование только от одного базового QObject.Название: Re: Виджеты на QGraphicsScene Отправлено: Fregloin от Май 05, 2011, 14:41 хорошо, тогда как мне создать виджет, который бы повторял собой QLCDNumber, но был наследником от QGraphicsObject?
Название: Re: Виджеты на QGraphicsScene Отправлено: GreatSnake от Май 05, 2011, 14:44 Никак.
Но можно сделать ход конём) Наследуйся от QGraphicsProxyWidget. В его конструкторе создавай QLCDNumber и помещай его в QGraphicsProxyWidget через setWidget(). Прописываешь интерфейс к QLCDNumber. Название: Re: Виджеты на QGraphicsScene Отправлено: Fregloin от Май 05, 2011, 15:26 Сделал. Но одна проблема, такие виджеты не перемещаются и не выделяются мышью на сцене.
Установка флагов ничего не дает. Есть идеи? Название: Re: Виджеты на QGraphicsScene Отправлено: Fregloin от Май 06, 2011, 00:29 Если кому то интересно, сделал класс наследник QMovableGraphicsProxyWidget, который как раз компенсирует этот недостаток + позволяет динамически менять размеры виджета (с помощью анкеров).
Итого имеем полноценное петераскивание виджетов и изменение их размеров в рантайме. Если нужно, выложу исходник. Название: Re: Виджеты на QGraphicsScene Отправлено: danquimby от Май 06, 2011, 13:17 Если кому то интересно, сделал класс наследник QMovableGraphicsProxyWidget, который как раз компенсирует этот недостаток + позволяет динамически менять размеры виджета (с помощью анкеров). Итого имеем полноценное петераскивание виджетов и изменение их размеров в рантайме. Если нужно, выложу исходник. Спасибо, бум смотреть :) Название: Re: Виджеты на QGraphicsScene Отправлено: Fregloin от Май 06, 2011, 16:21 с перемещением и изменением размеров разобрался.
проблема в следующем - сцена никак не реагирует на выделение виджетов. Название: Re: Виджеты на QGraphicsScene Отправлено: Fregloin от Июль 01, 2014, 17:16 Помогите составить правильную иерархию классов.
Допустим на сцене надо отображать помимо экземпляров наследников QGraphicsItem также экземпляры QGraphicsProxyWidget. При этому часть свойств у этих классов должна совпадать, как минимум id. Пути решения несколько, но пока не понимаю как по человечески сделать. т.е. как правильно описать классы, что бы работа с ними на сцене была прозрачна. Код: class ItemClass: public QGraphicsItem Т.е. работать как бы с общим интерфейсом id, load/save но внутренняя реализация этих классов разна, первы отвечает за простые элементы, второй за встроенные виджеты на сцене. Название: Re: Виджеты на QGraphicsScene Отправлено: GreatSnake от Июль 01, 2014, 17:29 Второй отнаследуй от ItemClass и инкапсулируй в него QGraphicsProxyWidget.
Название: Re: Виджеты на QGraphicsScene Отправлено: Old от Июль 01, 2014, 18:20 Код
Название: Re: Виджеты на QGraphicsScene Отправлено: GreatSnake от Июль 01, 2014, 18:27 +1, так, конечно, правильнее.
|