2014-04-10 6 views
0

인터넷에서 도움을 얻으려고했지만 테스트 할 코드가 있었지만 원하는 것은 작동하지 않았습니다.Qt 픽셀 단위로 도면 그리기

픽셀 단위로 Qt를 그립니다.

보호 된 이벤트 mousePressEvent을 사용하여 QLabel 내에서 QImage으로 시도했지만 픽셀이 너무 작아서 볼 수 없습니다.

내 이미지의 크기를 조정하려했는데 훨씬 좋았지 만 X, Y 위치가 현재 픽셀 위치와 같지 않거나 픽셀 위치와 동기화되지 않았습니다. 내가 정확히 Qt를 통해 이런 짓을 할 수있는 경우 여기에

내가 원하는 것을 스크린 샷

, 사람이 효과를 재현 할 생각이 있다면 ...

enter image description here

은 내가, 시간을 많이 절약 할 수 픽셀 단위의 기본적인 그림을 그리기 위해이 예제를 Paint, Black and White 형식으로 800 %로 확대했습니다.

감사합니다.

+0

더 구체적으로 질문하십시오. 어떤 코드 부분에 문제가 있습니까? 원하는 출력은 무엇입니까? 너는 정말로 무엇을 얻 느냐? –

답변

0

특정 크기로 하드 코딩 된 솔루션입니다. pixmap과 draw widget 간의 상대 좌표 매핑을 구현하면 설정됩니다.

class Widget : public QWidget 
{ 
    Q_OBJECT 

public: 
    Widget(QWidget *parent = 0) : QWidget(parent), pressed(0) { 
     color = Qt::black; 
     pixmap = new QPixmap("h:/small.png"); 
     resize(240, 240); 
    } 
    ~Widget() { if (pixmap) delete pixmap; } 

protected: 
    void paintEvent(QPaintEvent *) { 
     QPainter painter(this); 
     painter.drawPixmap(0, 0, pixmap->scaled(240, 240)); 
     painter.drawPixmap(0, 0, *pixmap); 
    } 

    void mousePressEvent(QMouseEvent *e) { 
     if (e->button() == Qt::RightButton) 
      color = color == Qt::black ? Qt::white : Qt::black; 
     else { 
      pressed = 1; 
      draw(e); 
     } 
    } 

    void mouseReleaseEvent(QMouseEvent *) { pressed = 0; } 
    void mouseMoveEvent(QMouseEvent *e) { draw(e); } 

private: 
    void draw(QMouseEvent *e) { 
     if (pressed) { 
      QPainter painter(pixmap); 
      painter.setPen(color); 
      int x = e->pos().x()/12; 
      int y = e->pos().y()/12; 
      painter.drawPoint(x, y); 
      repaint(); 
     } 
    } 

    QColor color; 
    QPixmap *pixmap; 
    bool pressed; 
};