2013-05-31 2 views
0

사용자 지정 QPushButton을 만들고 있습니다. 버튼에 아이콘이 있으면 버튼 중앙에 아이콘이 표시됩니다. 버튼에 텍스트가 있으면 버튼 중심에 텍스트를 넣고 싶습니다. 나는 그 두 가지 경우를 다룰 수있다. 버튼에 아이콘과 텍스트가 모두 포함되어 있으면 아이콘을 가운데에 배치하고 텍스트를 버튼 아래에 그려야합니다. 버튼 사각형 외부에 있습니다. 스타일 시트에서 테두리 이미지를 사용하여 단추 이미지를 그립니다.단추에서 QPushButton 텍스트 그리기

내부 MyPushButton :: paintEvent()는 내가 사각형을 계산하고 사용하여 아이콘을 그릴 :

style()->drawItemPixmap(&p, iconRect, Qt::AlignLeft | Qt::AlignVCenter, 
     this->icon().pixmap(iconRect.size())); 

난 후, 버튼 아래 텍스트 사각형을 계산이 수행

style()->drawItemText(&p, textRect, Qt::AlignCenter, (this->palette()), 
     true, this->text(), QPalette::ButtonText); 

을하지만, 텍스트가 보이지 않습니다.

"drawable"영역과 관련이 있어야한다고 생각하지만 버튼 이미지가 텍스트를 배치 할 영역을 채우지 않도록 영역을 확장하는 방법을 알 수 없습니다. .

QStyle :: drawControl() 오버로드로이 작업을 수행 할 수 있지만 그 이유는 확실하지 않습니다. 코드를 CE_PushButtonLabel 케이스로 추적하면 myStyle-> rect가 이미 버튼 이미지와 텍스트에 맞게 충분히 커지게됩니다.

+1

[QToolButton] (http://qt-project.org/doc/qt-5.0/qtwidgets/qtoolbutton.html)을 사용해 보셨습니까? – RobbieE

+0

QToolButton을 조사했지만 아이콘 아래에 텍스트가 나타나기를 원하지 않습니다. 나는 그것이 "명백한"버튼 이미지 아래에 나타나길 원합니다. Designer에 QPushButton을 배치한다고 가정 해보십시오. 속성 목록을 통해 "아이콘"속성 추가하기. 그런 다음 버튼의 경계 아래에 QLabel을 놓습니다. 그러나 QLabel의 내용은 버튼의 "텍스트"속성을 반영합니다. 아마 이런 식으로 할 수는 있지만 반드시 단추 배경을 그리고 단추의 범위를 변경하여 지정된 위치에 텍스트를 추가 할 수있는 방법이 있습니까? – user2429682

답변

0

QToolButton과 과 함께 일하는 것 같습니다.

+0

버튼 아래에 텍스트가 필요합니다. 단추에 아이콘을 표시하고 this-> text()가 반환하는 문자열을 아래에 그려서 QLabel이라는 느낌을줍니다. 고객은 이러한 방식으로 작동하는 QtDesigner를 통해 사용 가능한 사용자 정의 버튼을 원합니다. "text"속성을 입력하면 버튼 아래에 문자열이 표시되고 버튼 중앙에 "icon"이 표시됩니다. – user2429682