2012-08-07 6 views
1

QT 애플리케이션에서 아이콘 이미지 모양의 단추를 갖고 싶습니다. 알파 채널을 사용하여 사용 된 이미지 (.png)에서 마스크를 가져 와서 버튼 마스크를 설정하려고합니다.Qt 위젯 마스크 설정

QPushButton button(); 
QPixmap pixmap("image_path.png"); 
QIcon icon(pixmap); 
button.setIcon(icon); 
button.setMask(pixmap.createMaskFromColor(Qt::transparent,Qt::MaskInColor)); 

결과는 버튼이 사라집니다 것을 : 여기

는 관심의 코드 라인이다!

일부 테스트를 수행하면 마스크가 올바로 작성되었음을 확신 할 수 있습니다. 실수는 어디에서 발생합니까?

이처럼 알파와 .PNG를 사용하는 경우
+1

정확한 코드인가요? 위의 코드는 여러분이 스택에'QPushButton'을 생성했다는 것을 암시합니다 (범위를 벗어난 참조가 삭제 된 후에 바로 제거하지 않으려면'new'해야합니다). 또한 버튼에 부모 QWidget을 지정하지 않았습니다. – sjwarner

+0

안녕하세요 sjwarner, 답장을 보내 주셔서 감사합니다! 내가 작성한 코드는 내 애플리케이션에서 사용한 코드가 아닙니다. 버튼은 클래스의 private 멤버로 정의 된 QPushButton 포인터에서 만들어지며, 문제를보고하기 위해 여기에이 라인을 썼습니다. 그러나이 경우 버튼, 픽스맵 및 아이콘이 모두 스택에 할당되어 있지만 즉시 파손되지 말고 범위가 끝나야합니다 ... –

+0

방금 ​​.png 원형을 사용하여 단추 그림을 변경하려고했습니다. 붉은 색의 투명한 배경에 나는 모양이 정말 이상하고 삼각형 모양의 마스크를 가지고있어서 문제는 코드가 아니라 crateMask() 함수가 어떻게 작동하는지에 달려 있다고 생각합니다. 사용자 정의 모양의 단추를 얻는 다른 방법이 있습니까? createMask() 및 createEhuristicMask() 함수를 사용하는 다른 예제를 찾았지만이 두 번째 것은 내 응용 프로그램에서 작동하지 않습니다 ... –

답변

4


: 당신은 그 결과 같은있어 것

QPushButton button; 
button.resize(50,50); 
button.show(); 

QPixmap mask("D:/shape.png"); 
button.setMask(mask.mask()); 

:이 같은 마스크로 모양을 설정할 수 있습니다
transparent png
:
result shape button

+0

좋아,이 방법은 처음 시도했지만 그다지 효과가 없습니다! 내 응용 프로그램에서 QPixmap 마스크 결과가 이상한 ... 나는 또한 전체 색상 일반 모양 (원) 및 주위에 전체 trasparency만으로 구성된 나쁜 그림을 usign하여 시도했지만 같은 나쁜 결과. 이 시점에서 나는 이것이 Linux에서 Qt 4.6.3 (64 비트)의 버그 일 수 있다고 생각합니다. –