J'avais besoin d'aide pour essayer d'optimiser cette portion de code ... En gros, voici la chose .. Je fais ce 'stylo de calligraphie' qui donne l'effet de calligraphie en dessinant simplement beaucoup de lignes inclinées adjacentes ... Le problème est le suivant: Lorsque je mets à jour la région draw en utilisant update() après chaque tirage d'une ligne inclinée, la sortie est correcte, en ce sens que les mises à jour sont faites en temps opportun, de sorte que tout «dessiné» en utilisant le stylo est immédiatement «vu» le dessin .. cependant, parce qu'un lot (100s d'entre eux) des mises à jour sont faites, le programme ralentit un peu lorsqu'il est exécuté sur le N900 ...Besoin d'aide pour optimiser un code de dessin ...
Lorsque j'essaie de faire un peu d'optimisation en exécutant la mise à jour après avoir dessiné tous les lignes inclinées (de sorte que toutes les lignes sont mises à jour sur la planche à dessin via une seule mise à jour()), la sortie est ... impair .... Autrement dit, immédiatement après avoir dessiné les lignes, elles semblent brisées (elles ont patchs vacants où le dessin aurait dû se produire aussi) ... cependant, si je déclenche un redessin de la fenêtre de formulaire (disons, en changeant la taille du formulaire), les patches cassés sont immédiatement corrigés !! Lorsque j'exécute ce programme sur mon N900, il obtient la sortie brisée initiale et reste ainsi, car je ne sais pas comment appliquer un redessin dans ce cas ...
Voici le premier code 'optimisé' et sortie (partiellement correcte/incorrecte)
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;
}
image juste après griffonner sur l'écran:
http://img823.imageshack.us/img823/8755/59943912.png
après re-réglage de la taille de la fenêtre, tous les liens cassés ci-dessus sont fixés comme ils devraient être.
Voici le second code non optimisé (sa sortie est juste correct après le dessin, comme dans la deuxième image ci-dessus):
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;
}
Quelqu'un peut-il voir ce que la question pourrait être? approche
D'accord, je viens de l'essayer ... Il est bon que ça marche maintenant sur mon PC ... avec juste une mise à jour après la boucle for, ça marche toujours bien sur le PC ... mais quand je le lance sur le N900, le résultat n'est pas bon ... En dessinant 100% de lignes verticales, quelle que soit la rapidité, elles sont toujours pleines, sans "cassures" ... mais quand je dessine horizontalement des lignes semi-horizontales, il y a des cassures , même si je dessine la ligne * très * lentement ... – Ahmad