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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsScene/View как прикрутить компановщик к сцене  (Прочитано 4110 раз)
daimon
Гость
« : Май 16, 2011, 20:00 »

Код
C++ (Qt)
#include "clistwidgetlegendgraph2d.h"
#include <QtGui/QApplication>
 
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene scene(QRect(0,0,640,480));
 
CListLegend list(0);
list.addItems(QStringList()<<"sfdsdfshhhhhhhhhhhhhhhhdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf");
 
scene.addWidget(&list);
scene.addWidget(new QPushButton("button",0));
 
 
QPixmap pixmap(scene.sceneRect().width(),scene.sceneRect().height());
QPainter painter(&pixmap);
painter.setRenderHint(QPainter::Antialiasing);
scene.render(&painter);
painter.end();
 
 
pixmap.save("scene.png","png");
 
QGraphicsView view(&scene);
view.show();
return a.exec();
}
Есть ли какая-то реализация компоновщика в сцене, чтобы норально расположить там виджеты и есть ли более адекватный рендеринг, чтобы не создавать пиксмеп с размером?
спс
« Последнее редактирование: Май 16, 2011, 20:33 от daimon » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #1 : Май 16, 2011, 20:43 »

Имхо, но Вы похоже не по назначению используете сцену.

Смысл здесь в сцене?
Создайте обычный виджет и помещайте туда лайоут с теми виджетами, которые хотите скомпоновать.
Если нужно отрендерить его и сохранить, то у виджета есть такой метод render. Причём отрендерятся все виджеты, которые лежат на родителе.
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
daimon
Гость
« Ответ #2 : Май 16, 2011, 20:52 »

Раскажите свой вариант с графиком на пальцах
если сделать просто виджетом с лейаутом не получится тогда сделать рендеринг в картинку размера больше виджета

просто у меня есть виджет графика там редреринг пиксмепа по заданному размеру - по рендерингу и идёт сохранение в картинку
если повесить виджет то как тогда сделать рендер этого виджета вместе с графиком?

« Последнее редактирование: Май 16, 2011, 21:02 от daimon » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #3 : Май 16, 2011, 21:20 »

Раскажите свой вариант с графиком на пальцах
если сделать просто виджетом с лейаутом не получится тогда сделать рендеринг в картинку размера больше виджета

просто у меня есть виджет графика там редреринг пиксмепа по заданному размеру - по рендерингу и идёт сохранение в картинку
если повесить виджет то как тогда сделать рендер этого виджета вместе с графиком?

У Вас же есть исходники LightPlot2D. Проще их посмотреть, чем на пальцах здесь пытаться объяснить.

Цитировать
если сделать просто виджетом с лейаутом не получится тогда сделать рендеринг в картинку размера больше виджета

просто у меня есть виджет графика там редреринг пиксмепа по заданному размеру - по рендерингу и идёт сохранение в картинку
если повесить виджет то как тогда сделать рендер этого виджета вместе с графиком?
Почему это не получится?
Посмотрите как реализован метод
Код
C++ (Qt)
QPixmap toPixmap(const QSize &s);
 
В lightplot2d.h

Всё должно получится, вот пример приаттачен:
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #4 : Май 16, 2011, 21:38 »

Цитировать
если сделать просто виджетом с лейаутом не получится тогда сделать рендеринг в картинку размера больше виджета
Аа.. Да, больше размер можно получить только ценой потери качества - просто растяжение (масштабирование).
Но и сцена Вам здесь не поможет.. наверное.. 
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
daimon
Гость
« Ответ #5 : Май 16, 2011, 21:41 »

Цитировать
если сделать просто виджетом с лейаутом не получится тогда сделать рендеринг в картинку размера больше виджета
Аа.. Да, больше размер можно получить только ценой потери качества - просто растяжение (масштабирование).
Но и сцена Вам здесь не поможет.. наверное..  
Как я у вас увидел, вы вешаете просто виджет легенды на виджет графика
а во время рендеренга в картинку, рендерете график с грабом легенды (вызываете метод, который возвращает пиксмеп легенды)
Правильно ли я понял?
да и какой вариант теста либы скачивать под новую вашу либку?
« Последнее редактирование: Май 16, 2011, 21:44 от daimon » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #6 : Май 16, 2011, 21:47 »

Цитировать
Как я у вас увидел, вы вешаете просто виджет легенды на виджет графика
а во время рендеренга в картинку, рендерете график с грабом легенды (вызываете метод, который возвращает пиксмеп легенды)
Правильно ли я понял?
Да, легенда имеет свой буфер, как и Plotter, и при рендеринге я просто накладываю на пиксмап plotter'а пиксмап легенды. Однако, я могу сделать размер готового изображения больше того, который имеет сам виджет.
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #7 : Май 16, 2011, 21:49 »

Цитировать
да и какой вариант теста либы скачивать под новую вашу либку?
Я бы не сказал, что она новая..
Скачивать нужно последний вариант (пост #100) в http://www.prog.org.ru/topic_10208_90.html
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
daimon
Гость
« Ответ #8 : Май 16, 2011, 21:50 »

Цитировать
Как я у вас увидел, вы вешаете просто виджет легенды на виджет графика
а во время рендеренга в картинку, рендерете график с грабом легенды (вызываете метод, который возвращает пиксмеп легенды)
Правильно ли я понял?
Да, легенда имеет свой буфер, как и Plotter, и при рендеринге я просто накладываю на пиксмап plotter'а пиксмап легенды. Однако, я могу сделать размер готового изображения больше того, который имеет сам виджет.
у меня подобное, только рендер используется самим виджетом и пишется изображение в пиксмеп (размер зависит от размера окна), который и рисуется в пеинте
получается, если я реализую подобное, то у меня граб легенды будет рисоваться всё равно и будет распологаться под виджетом легенды. Мда довольно кривовато. Как бы такое подправить. Чо разные рендеринги написать?

Код
C++ (Qt)
void CPlotter2d::paintEvent(QPaintEvent * /* event */)
{
   QStylePainter painter(this);
 
painter.drawPixmap(0, 0,pixmap);// mg);*/
//refreshPixmap(opt_graph);
 
}
 
void CPlotter2d::resizeEvent(QResizeEvent * /* event */)
{
if(opt_graph.width_widget !=  this->size().width() || opt_graph.height_widget != this->size().height() )
{
opt_graph.width_widget = this->size().width();
opt_graph.height_widget = this->size().height();
 
pixmap= refreshPixmap(opt_graph);
}
 
//   refreshPixmap(opt_graph);
}
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #9 : Май 16, 2011, 21:59 »

Я же говорил, что правильнее изначально использовать для таких дел QGraphicsScene/View.
Но вначале нужно разобраться что из себя представляет сцена и для чего её придумали.
Или, как вариант использовать уже готовые решения, если время поджимает.
« Последнее редактирование: Май 16, 2011, 22:01 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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