2014-11-16 9 views
2

작은 프로그램을 작성 중이며 여러 개의 패널이 있습니다. 나는 그것이 패널에 집중할 때, 그것이 집중되어 있음을 보여주기 위해 얇은 인라인을 그린다. 내 트리보기를 제외한 모든 패널에서 작업 할 수 있습니다.QPainter를 사용하여 QTreeWidget에 그리기

void Test::paintEvent(QPaintEvent *event) 
{ 
    if(hasFocus()) 
    { 
     QPainter painter(this); 

     QPen pen(Qt::blue); 
     pen.setWidth(1); 
     painter.setPen(pen); 

     painter.drawRect(geometry()); 

    } 

    QWidget::paintEvent(event); 
} 

내가 콘솔에서 이러한 디버그 메시지를 얻을 QTreeWidgetQPainter을 사용합니다 :

  • QWidget::paintEngine : 더 이상 호출되지해야 다음

    QWidget와 함께 작동하는 예제
  • QPainter::begin : 장치 반환 장치 == 0, 유형 : 1
  • QPainter::setPen : 화가 활성화되지
  • QPainter::drawRects : 화가가 활성화되지는

그래서 내 문제는 내가 내 윤곽을 그릴 수없는 나는 내가 QTreeWidgetQPainter를 사용할 수 있다는 것입니다. 사용할 수있는 대체 방법이 있습니까?

+0

가 왜'QTreeWidget'에'paintEvent'를 사용하지? 'QTreeWidget :: paintEvent (event)'를 호출하여 수퍼 클래스 – msrd0

+0

의 페인팅을 수행 할 수 있습니다. 그게 제가 이미하고있는 일입니다. 필자는 페인트 이벤트에서 항상 수퍼 클래스를 호출하지만 주어진 예제에 추가하는 것을 잊어 버렸습니다. 하지만 그건 내 문제가 아니야. 내 문제는 QTreeWidget의 도형 주위에 직사각형을 그려야한다는 것입니다. QTreeWidget은 수퍼 클래스를 호출하여 수행 할 수 없습니다. QPainter 같은 것이 필요합니다 ... –

+0

왜 QPainter를 만들 수 없습니까? 'QTreeWidget'은'QWidget'의 서브 클래스 여야합니다 ... 그리고'QWidget :: paintEvent (event)'를'if' 외부에 추가해야합니다. – msrd0

답변

3

paintEvent은 전혀 필요하지 않습니다. 단지 스타일 시트 (setStyleSheet() 방법)을 사용

QTreeWidget:focus{ border: 1px solid red} 
QTreeWidget:!focus{} 

결과 :

enter image description here

+0

스타일 시트를 사용하는 것에 대해 생각하지 않았습니다. 덕분에 많은 것을 얻을 수있었습니다! –