Мне нужна была некоторая помощь в попытке оптимизировать этот фрагмент кода ... В основном, вот в чем дело ... Я делаю эту "ручку для каллиграфии", которая дает эффект каллиграфии, просто рисуя множество соседних наклонных линий ...проблема заключается в следующем: когда я обновляю область рисования с помощью update () после каждого рисования наклонной линии, выходные данные являются правильными, в том смысле, что обновления выполняются своевременно, так что все «нарисованное» с помощью перасразу «увидели» чертеж ... однако, поскольку много (из них 100 с) обновлений сделано, программа немного замедляется при запуске на N900 ...
КогдаЯ пытаюсь выполнить небольшую оптимизацию, запустив обновление после рисования всех наклонных линий (чтобы все линии обновлялись на чертежной доске через одно обновление ()), на выходе получается ... странный ..То есть сразу после рисования линий они кажутся ломаными (у них есть свободные участки, где должно было произойти рисование) ... однако, еслиЯ запускаю перерисовку окна формы (скажем, изменяя размер формы), сломанные патчи немедленно исправляются !!Когда я запускаю эту программу на моем N900, она получает исходный некорректный вывод и остается такой, поскольку я не знаю, как принудительно выполнить перерисовку в этом случае ...
Вот первый «оптимизированный»код и вывод (частично правильный / неправильный)
void Canvas::drawLineTo(const QPoint &endPoint)
{
QPainter painter(&image);
painter.setPen(QPen(Qt::black,1,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin));
int fx=0,fy=0,k=0;
qPoints.clear();
connectingPointsCalculator2(qPoints,lastPoint.x(),lastPoint.y(),endPoint.x(),endPoint.y());
int i=0;
int x,y;
for(i=0;i<qPoints.size();i++)
{
x=qPoints.at(i).x();
y=qPoints.at(i).y();
painter.setPen(Qt::black);
painter.drawLine(x-5,y-5,x+5,y+5); **// Drawing slanted lines**
}
**//Updating only once after many draws:**
update (QRect(QPoint(lastPoint.x()-5,lastPoint.y()-5), QPoint(endPoint.x()+5,endPoint.y()+5)).normalized());
modified = true;
lastPoint = endPoint;
}
Изображение сразу после написания на экране:
http://img823.imageshack.us/img823/8755/59943912.png
После повторной настройки размера окна всебитые ссылки выше исправлены, как и должно быть ..
Вот второй неоптимизированный код (его вывод корректен сразу после рисования, как на втором рисунке выше):
void Canvas::drawLineTo(const QPoint &endPoint)
{
QPainter painter(&image);
painter.setPen(QPen(Qt::black,1,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin));
int fx=0,fy=0,k=0;
qPoints.clear();
connectingPointsCalculator2(qPoints,lastPoint.x(),lastPoint.y(),endPoint.x(),endPoint.y());
int i=0;
int x,y;
for(i=0;i<qPoints.size();i++)
{
x=qPoints.at(i).x();
y=qPoints.at(i).y();
painter.setPen(Qt::black);
painter.drawLine(x-5,y-5,x+5,y+5); **// Drawing slanted lines**
**//Updating repeatedly during the for loop:**
update(QRect(QPoint(x-5,y-5), QPoint(x+5,y+5)).normalized());//.adjusted(-rad,-rad,rad,rad));
}
modified = true;
int rad = (myPenWidth / 2) + 2;
lastPoint = endPoint;
}
Кто-нибудь может понять, в чем проблема?