LINUX.ORG.RU

Qt. несколько вопросов по рисованию от новичка


0

1

Всем привет.

Есть несколько вопросов, хотелось бы узнать от бывалых, как лучше сделать. Хочу примерно следующее: надо реализовать визуализацию сигнала в стиле того, как показано на этом видео с 15 секунды:

http://www.youtube.com/watch?v=Sq00BmG9Myw&feature=related

Дело пишется на Qt. Как я понимаю из прочитанного по Qt, мне надо сделать свой QWidget, и в нем переписать paintEvent(). Есть ли другой вариант? Если нет, то надо ли объявлять массив для сохранения всех данных для визуализации на виджете и перерисовывать весь блок при каждом вызове, или хватит перерисовать только свежедобавленные данные, а остальные сохранятся на виджете?

Всем спасибо,
velik


Ты понимаешь правильно, но этот способ довольно медленный, лучше использовать что-то специализированное - Qwt, MathGL, etc.

aptyp ★★★★
()

хватит перерисовать только свежедобавленные данные, а остальные сохранятся на виджете?

Именно так. А для полной перерисовки придётся вручную затирать виджет (painter.fillRect()).

Но в твоём случае лучше пользоваться вышеупомянутыми штуками.

schizoid ★★★
()

QWT есть, не нужно велосипедить.

panter_dsd ★★★★
()

Ок, спасибо.

Про Qwt не слышал, но буду делать на нём, поскольку, как тут уже замечено, зачем велосипедить на автобане?

velikS
() автор топика
Ответ на: комментарий от velikS

Qwt довольно криво выглядит его нужно пилить и пилить. Проще заморочиться и за пару дней накатать свой класс(виджет) в котором будет вся отрисовка.

Задачка то не особо сложная.

Я обошелся без paintEvent. Рассчитал количество точек которые буду отрисовывать, расситал количество соединительных линий, сразу добавил их все на QGraphics и сделал периодическую пересборку(менял координаты линий).

Соответственно отрисовка идет не растром а объектами(вектором), с ними работать удобнее, очистку окна делать не надо, все эти вопросы решает сам Qt. Знай только точки меняй, и тру.

iTroll
()
Ответ на: комментарий от iTroll

Посмотрел на Qwt. Похоже и в сам деле проще сделать на QGraphicsView + QGraphicsScene так, как вкатце описано выше. Только не пойму, как отключить не то autoscroll, не то autoalignment у QGraphicsView. Хочу, чтоб левый верхний имел координаты (0,0), правый нижний соответственно максимальные значения, и если мои линии выходят за эти координаты, то пускай они будут обрезаны.

А сейчас у меня эти две линии получаются где-то в центре. Подскажите, чего ещё подкрутить?

Спасибо velik

 
CGuiPlethyDraw::CGuiPlethyDraw( QWidget* parent, const QRect& geometry, QColor backgroundColor )
{
	_scene.setBackgroundBrush ( backgroundColor );
	_view.setParent( parent );
	_view.setGeometry( geometry );
	_view.setScene ( &_scene );
	_view.setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
	_view.setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
	_view.setFixedWidth( geometry.width() );
	_view.setFixedHeight( geometry.height() );
	_view.setTransformationAnchor( QGraphicsView::NoAnchor );
	_view.setAlignment( 0 );
	_view.show();

	QPen pen (Qt::black );
	_scene.addLine(-50, 0, 10, 0, pen );
	_scene.addLine(0, 10, 100, 10, pen );

velikS
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.