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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Непонятка по поводу скрости работы QPainter::drawPolyline  (Прочитано 2073 раз)
Vamireh
Гость
« : Август 11, 2013, 14:37 »

В программе используется собственноручно написанный класс для рисования графиков. Обычно число точек осредненно до пары десятков - сотен, тогда все хорошо, но иногда надо отрисовать все точки, а их пара сотен тысяч - миллион. cur - объект класса кривой, по сути QVector<QPointF> с  примочками вроде цвета и толщины. И вот тут проявилась одна вещь, которую не могу понять:
Код:
 qDebug() << "A:" << QDateTime::currentDateTime();
        
        if (cur->getStyle() & Curve::LineStrip) {

            qDebug() << "1:" << QDateTime::currentDateTime();
            
            newData.clear();
            painter->setPen(cur->getLinePen());

            qDebug() << "2:" << QDateTime::currentDateTime();

            QVector<QPointF>::const_iterator itCurEnd = cur->data.constEnd();
            for (QVector<QPointF>::const_iterator p = cur->data.constBegin(); p != itCurEnd; ++p) {
                x = (int)((p->x() - minX) * KX) + marginLeft;
                y = (int)(height() - (p->y() - minY) * KY) - marginBottom;
                newData.push_back(QPoint(x, y));
            }

            qDebug() << "3:" << QDateTime::currentDateTime();

            painter->drawPolyline(QPolygon(newData));

            qDebug() << "4:" << QDateTime::currentDateTime();
        }

        qDebug() << "B:" << QDateTime::currentDateTime();

А вот два результата:

A: QDateTime("Sun Aug 11 15:07:50 2013")
1: QDateTime("Sun Aug 11 15:07:50 2013")
2: QDateTime("Sun Aug 11 15:07:50 2013")
3: QDateTime("Sun Aug 11 15:07:50 2013")
4: QDateTime("Sun Aug 11 15:07:51 2013")
B: QDateTime("Sun Aug 11 15:07:51 2013")


A: QDateTime("Sun Aug 11 15:08:09 2013")
1: QDateTime("Sun Aug 11 15:08:09 2013")
2: QDateTime("Sun Aug 11 15:08:09 2013")
3: QDateTime("Sun Aug 11 15:08:09 2013")
4: QDateTime("Sun Aug 11 15:09:58 2013")
B: QDateTime("Sun Aug 11 15:09:58 2013")

Абциссы в обоих случаях одинаковые. Между двумя прогонами разница всего лишь в том, что в первом случае ординаты 0<y<1, а во втором - 240<y<300. Откуда такая разница во времени работы painter->drawPolyline(QPolygonF(newData));?
« Последнее редактирование: Август 25, 2013, 17:50 от Vamireh » Записан
Vamireh
Гость
« Ответ #1 : Август 25, 2013, 17:50 »

исправил drawPolyline на drawLines. скорость отрисовки сравнялась и ускорилась в разы.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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