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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Реализация блоков для визуального программирования  (Прочитано 1028 раз)
AlexZ
Новичок

Offline Offline

Сообщений: 9


Просмотр профиля
« : Апрель 11, 2017, 18:41 »

Всем привет. С помощью чего лучше реализовать блоки для визуального программирования? Например как тут.
1. Если через QGraphicsObject, то как можно в блок вставить QLineEdit и другие виджеты?
2. Возможно ли это сделать создав свой виджет? И если да, то как запихать его в что-то типа QGraphicsScene?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1810



Просмотр профиля WWW
« Ответ #1 : Апрель 11, 2017, 20:29 »

Порядок действий:

 Смеющийся

В описании того репозитория была ссылка на русскоязычную статью о том как автор разрабатывал: http://ilgarlunin.blogspot.ru/2015/09/blog-post.html
« Последнее редактирование: Апрель 11, 2017, 20:31 от gil9red » Записан

AlexZ
Новичок

Offline Offline

Сообщений: 9


Просмотр профиля
« Ответ #2 : Апрель 12, 2017, 06:53 »

Спасибо за ответ. Ссылки видел, но статью как-то проглядел. Появились еще вопросы:
1. Насколько Qt для питона отличается от Qt для C++?
2. Из статьи не понятно как автор запихал в ноды Qt-ые виджеты. И правильно ли он делал?

Собственно мне нужно реализовать ноды, которые можно было бы запихать в QGraphicsScene и которые бы поддерживали Qt-ые виджеты(QLineEdit и т.д.). Хотелось бы узнать мнение у местных старожил, с помощью чего правильно это сделать и в какую сторону копать.

P.S. На сколько я понял из других тем, то можно попробовать через QGraphicsProxyWidget.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1810



Просмотр профиля WWW
« Ответ #3 : Апрель 12, 2017, 07:35 »

1. Ничем. Тот же Qt, но с привязкой к питону. Даже Qt'шные dll'ки можно найти
Записан

Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #4 : Апрель 12, 2017, 12:10 »

Прокси виджеты, вы копаете в правильную сторону.
Записан
Day
Самовар
**
Offline Offline

Сообщений: 185


Просмотр профиля
« Ответ #5 : Апрель 12, 2017, 15:39 »

Что-то в таком роде
Код:
   QLineEdit *LE = new QLineEdit();
   QGraphicsProxyWidget *gpw = scene->addWidget(LE);
И дальше работаете с gpw.
Записан
AlexZ
Новичок

Offline Offline

Сообщений: 9


Просмотр профиля
« Ответ #6 : Апрель 15, 2017, 11:38 »

Всем спасибо за ответы и помощь. В общем для теста сделал так:

Отнаследовался от QGraphicsProxyWidget:

.h файл
Код:
#include <QGraphicsProxyWidget>

class CustomWidget : public QGraphicsProxyWidget {

Q_OBJECT

public:

explicit CustomWidget(QGraphicsItem * parent = 0, Qt::WindowFlags wFlags = 0);
~CustomWidget();

signals:

public slots:
};

.cpp файл
Код:
#include "customwidget.h"

#include <QLineEdit>

CustomWidget::CustomWidget(QGraphicsItem * parent, Qt::WindowFlags wFlags) : QGraphicsProxyWidget(parent, wFlags) {

QLineEdit * lineEditWidget = new QLineEdit();
this->setWidget(lineEditWidget);
this->setPos(10, 10);
}

CustomWidget::~CustomWidget() {

}

появились 2 проблемы:
1. Когда перемещаешь графический объект за границы view, а потом скроллом перемещаешь view на графичекий объект, то возникают глюки с отрисовкой. Перерисовывается только графический объект, а виджет нет. И такое ощущение, что перерисовка идет поверх старого объекта , ибо по обводке можно заметить, что ее толщина в некоторых местах разная. Причем с объектом, который был заспавнен на сцену первым, все нормально. скриншот.
2. После действий связанных с ресайзом окон появляются также баги с отрисовкой. скриншот.

Код добавления графического блока:
Код:
void MainWindow::on_addBlock_clicked() {

Block * item = new Block;

item->setPos(randomPos(30, 230), randomPos(30, 230));
item->setFlags(QGraphicsItem::ItemIsMovable);
scene->addItem(item);

CustomWidget * widget = new CustomWidget(item);
}

Подскажите пожалуйста, как исправить отрисовку? Может нужно еще какой-нибудь метод перегрузить у прокси виджета?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3822


Просмотр профиля WWW
« Ответ #7 : Апрель 20, 2017, 07:32 »

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

П.С.
Я перестал делать наследников QGraphicsProxyWidget, т.к. это довольно часто приводит к глюкам. Просто добавляю виджеты через QGraphicsProxyWidget.
Записан

Юра.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 9854


Просмотр профиля
« Ответ #8 : Апрель 20, 2017, 11:42 »

Лично я не увидел здесь особых выгод QGraphicsScene и реализовал подобную задачу на QPainter. В любом случае больное место - размещение "блоков", напр чтобы воткнуть новый юзеру приходится делать массу телодвижений (куда-то подвинуть имеющиеся и.т.п)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

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