circle 안에 이미지가 들어가는 형태를 구현하기가 생각보다 어렵고.


고정된 이미지일 경우 style sheet로 간단하게 구현이 된다.


하지만 로컬 이미지를 가지고? circle 형태의 QLabel을 만들기는 까다롭다



그래서 QLabel를 상속 받아서 다음과 같이 처리하면 쉽게? 그릴수 있다.

CircleLabel은 QLabel을 상속 받은 QWidget이다.

private:

void paintEvent(QPaintEvent *event) override;//paintEvent을 override한다


void CircleLabel::paintEvent(QPaintEvent *event)

{

QString pixmapPath = imagePath_;

if (imagePath_.isEmpty())

{

pixmapPath = ":image/defaultimage.png";

}

//draw main image

QPixmap mainPixmap(pixmapPath);

QPixmap scaled = mainPixmap.scaled(width(), height(), Qt::KeepAspectRatioByExpanding,                 Qt::SmoothTransformation);

QBrush brush(scaled);

QPainter painter(this);

painter.setRenderHint(QPainter::Antialiasing, true);

painter.setRenderHint(QPainter::SmoothPixmapTransform, true);

painter.setBrush(brush);

painter.setPen(QColor("red"));//pen 색을 적절히 지정해주면 antialiasing이 부족한 부분이 티가 덜 난다~

painter.drawRoundedRect(0, 0, width(), height(), 90, 90);

//만일 2개 이미지를 겹쳐서 그린 다면 다음과 같이 추가해주면 된다.- 첨부이미지 기준으로 스머프 우측 하단에 //설정 이미지와 같은.~

QPixmap settingPixmap(":image/Edit.png");

painter.drawPixmap(66, 66, settingPixmap);


QLabel::paintEvent(event);

}

by 무위자연 2018. 12. 10. 11:40