Мне нужна была помощь в попытке оптимизировать эту часть кода ... В основном вот что. Я делаю это «ручка каллиграфии», которая дает эффект каллиграфии, просто рисуя много смежных наклонных линий ... Проблема заключается в следующем: когда я обновляю область рисования с помощью 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;
}
Может кто-нибудь увидеть, что может быть проблема?
Хорошо, я только что пробовал ... Хорошо, что теперь он работает на моем ПК ... с одним обновлением после цикла for, он все равно отлично работает на ПК ... однако, когда я запускаю его на N900, результат не очень хорош ... При рисовании 100% вертикальных линий, независимо от того, насколько быстро они всегда сплошные, без «перерывов». Однако, когда я рисую горизонтальные четные полу-горизонтальные линии, есть перерывы , даже если я рисую линию * очень медленно ... – Ahmad