2011-12-04 96 views
0

我對如何實現某種圖形編輯器有一個小問題。 對於繪圖我使用這種方法: 首先我檢查是否鼠標左鍵單擊,然後我在我的QPixmap上event-> pos()繪製一個像素,然後我調用update();重新繪製它。如果鼠標移動按下按鈕(因爲沒有它,它將只是一些點),我還在兩個點之間的QPixmap上畫線。它工作得很好,但我想知道是否有更優化的方法來做到這一點。下面是一些代碼(我已經跳過部分與變焦,之間的連接丟失的像素到像素等)在QPixmap上優化繪圖

void Editor::paintEvent(QPaintEvent *event) 
{ 
    painter.drawPixmap(QRect(0, 0, image.width() * zoom , image.height() * zoom), 
          image); 
} 

void Editor::mousePressEvent(QMouseEvent *event) 
{ 

    if(event->button() == Qt::LeftButton) 
    { 
     setImagePixel(event->pos()); 
    } 

} 

void Editor::mouseMoveEvent(QMouseEvent *event) 
{ 
    if(event->buttons() & Qt::LeftButton) 
    { 
     setImagePixel(event->pos(), true); 
    } 
} 

void Editor::setImagePixel(const QPoint &pos) 
{ 

    QPainter painter(&image); 
    if(image.rect().contains(i, j)) 
    { 
     painter.begin(&image); 
     painter.setPen(primaryColor); 
     painter.drawPoint(i, j); 
     painter.end(); 
    } 
} 

回答

1

是的,我會用QPainterPath及其API繪製手工製作的形狀。看看它的方法:moveTo()lineTo(),它可以讓你擺脫繪圖邏輯(缺少像素等)。與鼠標事件相結合也很容易。

希望這會有所幫助。

+0

哇...非常感謝,真的有幫助!^_^ 我很高興我不必重新發明車輪。祝你今天愉快。 –

+0

還有一個問題。我試圖使用不同寬度的筆。但它看起來不是很好,像這樣 - > http://i.imgur.com/lNdKO.png。我想這是因爲我一直在繪製很多路徑。我怎樣才能擺脫這一點? –

+0

您是否嘗試過'QPainter :: setRenderHint(QPainter :: Antialiasing,true)'?我不完全理解_I我一直在繪製大量路徑_但我不確定它與渲染結果有關 – azf