Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: deaks от Апрель 26, 2011, 10:51



Название: Рисование
Отправлено: deaks от Апрель 26, 2011, 10:51
Добрый день!

с помощью QGraphicsLineItem рисую график осциллографа во времени(то есть с каждым шагом к старым значениям добавляется новое). при этом мне необходимо этот динамический график вращать и сдвигать.
сейчас я все это делаю, путем пересчет всех предыдущих значений графика для определенного угла и смещения, что совсем неправильно.

или как-то объединять объекты в группу, чтобы для них всех вместе делать ->setRotate() как для обычного итема.
как лучше сделать?


Название: Re: Рисование
Отправлено: madRoger от Апрель 26, 2011, 11:03
Посмотрите на QGraphicsItemGroup.
А вообще для работы с графиками есть библиотека qwt.


Название: Re: Рисование
Отправлено: deaks от Апрель 26, 2011, 11:09
про qwt знаю, но в данном случае он не подходит


Название: Re: Рисование
Отправлено: deaks от Апрель 26, 2011, 11:18
с QGraphicsItemGroup хорошая идея, только вот как быть, если я отрисовал 10 отрезков графика, добавил их в группу. а потом ее повернул и сдвинул. то как потом к этому добавлять 11ый отрезок?мне ведь надо чтобы график непрерывно вращался и при этом он "рос" со временем

может есть возможность рисовать в определенной области с локальными координатами, а потом эту область вращать и сдвигать в глобальной?


Название: Re: Рисование
Отправлено: madRoger от Апрель 26, 2011, 12:30
Цитировать
может есть возможность рисовать в определенной области с локальными координатами, а потом эту область вращать и сдвигать в глобальной?

Для ентого есть куча методов для преобразования координат: mapTo.... mapFrom....


Название: Re: Рисование
Отправлено: deaks от Апрель 26, 2011, 13:40
так у меня сейчас все эти объекты принадлежат одной сцене. то есть несколько графиков в одной сцене.
а как вы подразумеваете?


Название: Re: Рисование
Отправлено: madRoger от Апрель 26, 2011, 13:48
Я поэкспериментировал с итемами. Подергал преобразования координат. Я вообще раньше с ними не работал. Посмотрите на этот код, может натолкнет на какие-нить мысли:
Код:
sc = new QGraphicsScene(this);
  ui->graphicsView->setScene(sc);
  ui->graphicsView->setSceneRect(0,0,300,300);

  QGraphicsLineItem *li = new QGraphicsLineItem(1,1,100,100);
  li->setPen(QPen(Qt::black));
  QGraphicsLineItem *li2 = new QGraphicsLineItem(100,10,20,200);
  li2->setPen(QPen(Qt::black));
  QGraphicsItemGroup *ig = new QGraphicsItemGroup;
  ig->addToGroup(li);
  ig->addToGroup(li2);

  sc->addItem(ig);

  ig->moveBy(100,100);
  ig->rotate(10);

  QPointF p1,p2;

  p1 = ig->mapToScene(ig->mapFromItem(ig,QPointF(1,100)));
  p2 = ig->mapToScene(ig->mapFromItem(ig,QPointF(200,100)));

  QGraphicsLineItem *li3 = new QGraphicsLineItem(p1.x(),p1.y(),p2.x(),p2.y());

  li3->setPen(QPen(Qt::black));
  ig->addToGroup(li3);

Или я все не так понял...

UPD: вместо:
Код:
p1 = ig->mapToScene(ig->mapFromItem(ig,QPointF(1,100))); 
p2 = ig->mapToScene(ig->mapFromItem(ig,QPointF(200,100)));

можно проще:
Код:
 p1 = ig->mapToScene(QPointF(1,100));
 p2 = ig->mapToScene(QPointF(200,100));


Название: Re: Рисование
Отправлено: deaks от Апрель 26, 2011, 14:23
Или я все не так понял...

вы правильно поняли меня)) огромное вам спасибо!