2011-12-04 18 views
0

グラフィックスエディタを実装する方法について少し質問があります。 私はこのメソッドを使用しています: まずマウスの左ボタンがクリックされていることを確認してから、私のQPixmapのevent-> pos()に1ピクセル描画し、その後update()を呼び出します。それを再描画する。また、QPixmap上の2つの点の間に、ボタンが押された状態でマウスを動かすと線がペイントされます。これはかなりうまくいきますが、これを行うためのより最適化された方法があるかどうかを知りたいと思います。ここではいくつかのコードです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

もう1つ質問があります。幅の違うペンを使ってみました。しかし、これはあまりいいことではありません - > http://i.imgur.com/lNdKO.png。私はいつもたくさんの道​​を描くからだと思います。どうすればこれを取り除くことができますか? –

+0

'QPainter :: setRenderHint(QPainter :: Antialiasing、true)'を試しましたか?私はかなり理解していません_私はいつも多くの経路を描いていますが、レンダリング結果に関連しているかわかりません – azf

関連する問題