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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: QGraphicsView + Виджеты.  (Прочитано 14417 раз)
Bepec
Гость
« : Январь 14, 2014, 10:04 »

Приветствую заглянувших.

Собственно поставил я себе цель написать не торопясь программу-аналог для построения UML схем. Точнее набраться практики по данному направлению разработки.
Чтобы было яснее - скриншот.


Подумал над архитектурой и решил что QGraphicsView и Scene будут в самый раз.
Создал виджет, запихнул его в Scene и понял, что взаимодействие виджетов со сценой не проработано (Qt 4.7.2). Передвигать нельзя, если пользоваться сторонними классами, взятыми с этого форума (для растягивания и перетягивания), то теряется фокус и прочие прелести.

Внимание, вопрос:
1) Правильно ли я выбрал инструменты (QGraphicsView/Scene) или есть более подходящие.
2) Как лучше сделать?
       QGraphicsItem с данными, с которым будет разбираться сцена.
       Виджет с собственной логикой, внедрённый в Scene.

Пока это все вопросы, но в дальнейшем добавится больше.

PS если есть ссылки на уроки с QGraphicsView, то буду благодарен.
PPS долго сомневался куда засунуть тему. Не решил...
Записан
_OLEGator_
Гость
« Ответ #1 : Январь 14, 2014, 10:54 »

Все верно, для такой задачи QGraphicsView/Scene подходит. Только не надо создавать виджет и пихать его в сцену, надо переопределять QGraphicsItem и от него плясать свои собственные айтемы.
Не понял, почему не удалось передвинуть виджет, этот механизм рабочий и в чем именно не проработано взаимодействие виджетов со сценой тоже не ясно.
Я достаточно плотно работал со сценой, так что могу помочь - задавай вопросы.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #2 : Январь 14, 2014, 11:29 »

Открою вам секрет, что программа которая на экране с вероятностью 95% написана с использованием GraphicsScene.
И зачем пихать виджеты на сцену? Вам нужно видеть поля ввода, комбобоксы и т.п. элементы ввода/вывода? На сколько я понял в диаграмах UML такие компоненты не используются,
поэтому достаточно переопределить свои элементы. Если нужно генерить сигналы наследуйтесь от GraphicsObject.
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #3 : Январь 14, 2014, 12:25 »

Открою вам секрет, что программа которая на экране с вероятностью 95% написана с использованием GraphicsScene.
Тут промах - Delphi 7 Update 1 (http://staruml.sourceforge.net/en/development-setting.php)
Да и на скриншоте Дельфовое наследие со всех щелей прёт (не говорю, что это плохо!).
Записан
Bepec
Гость
« Ответ #4 : Январь 14, 2014, 20:38 »

to  _OLEGator_:
При пробросе виджета через addWidget сцены, виджет не реагирует на попытки его перенести и флаг не помогает. Это не единичная проблема (тут пара тем на эту проблему есть.)

to Fregloin:
Нужны и поля ввода и автоподстановка. На скрине "неактивная схема" При наведении указателя появляются кнопочки работы с элементом. Разные поля - разные контекстные меню. В каждом поле можно щелкнуть и будет добавлен элемент в поле и открыт для редактирования, типа lineEdit.


Т.е. всё таки лучше наследоваться от graphicsItem'a и давать сцене решать все вопросы. А как быть с редактируемыми полями?
Т.е. graphicsItem создали, он красиво отрисовывает данные. И вот хочется их изменить - вызвать lineEdit что ли. Или самому придётся писать велосипед для этой цели?

PS извиняюсь за вопросы "без попыток", завтра отнаследуюсь и отпишусь ещё. Спасибо за ответы.
Записан
_OLEGator_
Гость
« Ответ #5 : Январь 14, 2014, 20:47 »

Все виджеты работают на сцене и таскаются, в чем конкретно проблема?
Записан
Bepec
Гость
« Ответ #6 : Январь 14, 2014, 22:15 »

Создаём собственный виджет, кидаем на него пару listWidget + lineEdit + label, добавляем компоновщик. Пихаем сие чудо в scene. Тык на него мышкой - а оно и не работает. Выставляем флаг itemMovable, реакция нулевая.
Записан
_OLEGator_
Гость
« Ответ #7 : Январь 14, 2014, 22:23 »

Давай минимальный проект - с ним проще будет работать, не мне же его создавать.
Сейчас глянул - у сцены похоже до сих пор глюк с выделением QGraphicsProxyWidget остался - надо самому вызывать выделение по нажатию в режиме редактирования, тогда он и таскаться начнет:
http://www.qtcentre.org/threads/28434-Move-QGraphicsProxyWidget
Записан
Bepec
Гость
« Ответ #8 : Январь 14, 2014, 22:25 »

Дико извиняюсь, но завтра. Сегодня башка раскалывается Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #9 : Январь 14, 2014, 22:52 »

Веселая тема Улыбающийся Я как то хотел аналог визио и инкскейпа сделать... Тоже на сцене, но это было еще кути 4.0, там сцена вообще отдельным солюшеном шла.
Но да, такое я бы только на сцене и делал. Не знаю за 4.8 и 5.х, но в 4.7 были дикие глюки с виджетами в ней...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Bepec
Гость
« Ответ #10 : Январь 15, 2014, 07:09 »

Пример, как и обещал. В архиве pro и sln (VS2008).
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Январь 15, 2014, 07:43 »

Но да, такое я бы только на сцене и делал.
Тем не менее designer у Qt-ишников сцену не использует)
Записан

Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
« Ответ #12 : Январь 15, 2014, 07:45 »

Я вот тут думаю, не написать ли свой велосипед.
Ибо пока не могу понять как сделать так, чтобы можно было редактор вызывать в итеме. Или над итемом. В общем пробую Веселый
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #13 : Январь 15, 2014, 07:48 »

Я вот тут думаю, не написать ли свой велосипед.
Ибо пока не могу понять как сделать так, чтобы можно было редактор вызывать в итеме. Или над итемом. В общем пробую Веселый
Обычно для таких целей используют невидимый айтем-виджет-контейнер, который уже будет и двигать и резайзить своего потомка.
Записан

Qt 5.11/4.8.7 (X11/Win)
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #14 : Январь 15, 2014, 11:19 »

В своей новой версии программы я именно так и сделал. Это намного лучше чем каждый элемент будет обрабатывать себя сам.
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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