2013-04-09 8 views
2

투명한 이미지를 QImage를 사용하여 그리려고 할 때마다 검정 배경이됩니다. 나는 배경이 없으므로 서클을 그려야한다. 배경은 없다. 어떻게 할 수 있는가?Qt를 사용하여 원의 그리기를 포함하는 투명한 qimage를 그릴 필요가 있습니다.

나는 화가의 브러쉬 형태가 작성되는 방법을 정의 코드

QImage image(size, QImage::Format_ARGB32); 
    image.fill(qRgba(0,0,0,0)); 

// Pick an arbitrary size for the circle 
const int centerX = size.width()/2; 
const int centerY = size.height()/2; 
const int radius = std::min(centerX, centerY) * 2/3; 
const int diameter = radius * 2; 

// Draw the circle! 
QPainter painter(&image); 
painter.setPen(Qt::yellow); 
painter.drawEllipse(centerX-radius, centerY-radius, diameter, diameter); 
+0

어떻게 이미지를 표시하고 있습니다? 어쩌면 문제는 이미지 자체가 아니라 이미지를 보여주는 방식 일 것입니다. –

답변

3

http://qt-project.org/doc/qt-4.8/qpainter.html#settings

http://qt-project.org/doc/qt-4.8/qpainter.html#setBrush

을 사용했다.

희망이 있습니다.

편집 : 멋진 예제를 추가 :

기본적으로 아래에 무슨 일이 윈도우합니다 ( QImage의 알파 값이 눈에 띄는하고 예측 가능한되도록) 배경 색상이 설정되어있다

. QImage은 알파 값이 255 미만인 색상으로 초기화됩니다. 위젯이 업데이트되면 (이미지가 메인에 표시 될 때) 이미지가 그려집니다.

widget.cpp

#include "widget.h" 
#include <QImage> 
#include <QPainter> 
#include <QPalette> 

Widget::Widget(QWidget *parent) 
    : QWidget(parent) 
{ 
    init_image(); 

    QPalette p = this->palette(); 
    p.setColor(QPalette::Background, Qt::white); 
    this->setPalette(p); 
} 

void Widget::init_image() 
{ 
    image = new QImage(200, 200, QImage::Format_ARGB32); 

    int opacity = 50;// Set this between 0 and 255 
    image->fill(QColor(0,0,0,opacity)); 

    QPainter painter (image); 
    painter.setPen(Qt::green); 

    painter.drawEllipse(10, 10, 100, 100); 
} 

Widget::~Widget() 
{ 

} 

void Widget::paintEvent(QPaintEvent * e) 
{ 
    QPainter painter(this); 
    painter.drawImage(0,0, *image,0,0,-1,-1,Qt::AutoColor); 
} 

Widget.h

#ifndef WIDGET_H 
#define WIDGET_H 

#include <QWidget> 
#include <QPaintEvent> 

class Widget : public QWidget 
{ 
    Q_OBJECT 

public: 
    Widget(QWidget *parent = 0); 
    ~Widget(); 
    void init_image(); 

public slots: 
    void paintEvent(QPaintEvent *); 
private: 
    QImage * image; 
}; 

#endif // WIDGET_H 

하여 Main.cpp는

#include "widget.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    Widget w; 
    w.show(); 

    return a.exec(); 
} 
+0

나는이 문서만을 참조한 다음 아래에 표시된 코드를 시도했다. 이 문제를 해결하도록 도와 주시겠습니까? –