2011-12-02 4 views
0

QImage에 그래프가 표시되고 마우스 오른쪽 버튼을 누르면 측정을 위해 십자형 (+)을 측정하고자합니다.위치에 QImage의 십자가를 설정합니다. 여기에서 마우스로 누른 위치

 void foo::mousePressEvent(QMouseEvent *event) 
     { 
     if (event->button() == Qt::RightButton) { 
      QPoint pos = event->pos(); 
      int x = pos.x(); 
      int y = pos.y(); 
      QLine line(x-5,y,x+5,y); 
      QLine line(x,y-5,x,y+5); 
      QPainter painter(&my_image); 
      painter.setPen(Qt::red); 
      painter.setBrush(Qt::yellow); 
/* 
QPainter::begin: Cannot paint on an image with the QImage::Format_Indexed8 format 
QPainter::setPen: Painter not active 
QPainter::setBrush: Painter not active 
*/ 


       painter.drawLine(line); //no effect 

     } 
     } 

내가 Paintevent (...)에서 수행하면 원래 그림이 파괴됩니다. 내가 어떻게 해.

추가 정보 : 이미지의 색인이 생성되었습니다. // _ index_value_of_cross_color -

my_image.setColorCount(33); 
    for(int i = 0;i<33;i++) 
    { 
     my_image.setColor(i,qRgb((unsigned char)palette[i*3], (unsigned char)palette[i*3+1], (unsigned char)palette[i*3+2])); 
    } 

my_imag는 검은 배경이 나는 백색의 단면을 그리려> = 32

INT 색 (이 인덱스 32);

 for (int ix=x-5;ix<x+5;ix++) { 
      my_image.setPixel(ix,y,color); 
     } 

     for (int iy=y-5;iy<y+5;iy++) { 
      my_imag.setPixel(x,iy,color); 
     } 

하지만 효과가 없습니다.

+1

를 참조? QImage를 페인트 장치로 사용하려면 초기화 된 QPainter를 사용해야합니다. – cmannett85

+0

QPainter를 사용하여 코드를 변경하여 선을 그립니다. –

+0

이미지를 표시하기 위해'QGraphicsView'를 사용합니까? – pnezis

답변

2

의견에 따라 Format_Indexed8을 사용하여 QImage에 페인트 할 수 없습니다. QImage 워드 프로세서에서

:

Warning: Painting on a QImage with the format QImage::Format_Indexed8 is not supported.

가 QImage 같은 다른 형식을 선택 :: Format_ARGB32_Premultiplied 사물이 작동합니다.

+1

QImage :: Format_ARGB32가 도움이되지 않습니다. –

+0

QImage :: Format_ARGB32_Premultiplied는 미리 곱셈되지 않은 열거 형입니다. –

1

빠르고 간단하고 또 다른 대안은 이미지 데이터의 값을 간단히 설정하는 것입니다.

당신은 조금 더 작업을해야 할 것 - 더 줄 명령이 없기 때문에, 어떻게 선을 그리는 setpixel

int x = pos.x(); 
int y = pos.y(); 
int color = _index_value_of_cross_color; 

for (int ix=x-5;ix<x+5;ix++) { 
    my_image.setPixel(ix,y,color); 
} 

for (int iy=y-5;iy<y+5;iy++) { 
    my_image.setPixel(x,iy,color); 
} 
+0

Qrgb 색상을 설정하면 오류가 발생합니다 : 색인이 범위를 벗어났습니다! –

+0

이미지의 색인이 생성 된 경우 십자가에 원하는 색인의 색인을 설정해야합니다. 0-255 –

+0

이미지의 색인이 생성됩니다. my_image.setColorCount (33); (int i = 0; i <33; i ++) 에 대한 my_image.setColor (i, qRgb (r [i], g [i], b [i])); 및 32 (흰색) 색을 설정합니다. 배경은 검정색입니다. 그러나 아무런 효과가 없다. –