2012-12-07 2 views
1

QTreeView의 항목을 스타일링하고 싶습니다. 즉, 위쪽/아래쪽 패딩을 조금 늘리십시오. 이 내 코드 조각입니다 :qtreeview :: item이있는 Qt 스타일 시트는 하위 항목에만 적용됩니까?

QTreeView::item 
{ 
    padding-top: 8px; 
    padding-bottom: 8px; 
    color: red; 
} 

불행하게도,이 하위 항목에 패딩을 적용합니다. 모든 최상위 항목은 이전과 똑같은 패딩을가집니다. 나는 "color : red;"라고 덧붙였다. 테스트 목적으로 만 사용되지만 빨간색 텍스트 색상은 모든 항목에 적용됩니다.

일부 누락 된 한정자가 있습니까? :active:has-sibling으로 시도했지만 결과는 각 경우에 동일했습니다.

Screenshot

나는 Qt는 4.6.3을 사용하고 있습니다. 나는 또한 4.8로 시도했지만 결과는 같습니다.

+1

이렇게하려면 스타일 시트를 사용해야합니까? QAbstractItemDelegate를 서브 클래스 화하고 sizeHint를 재정 의하여 원하는 것을 얻을 수 있습니다. –

+0

@DanielCastro 다른 정의가 포함 된 더 큰 스타일 시트가 있기 때문에 확실히 더 쉬울 것입니다. 나는 당신의 아이디어를 시도 할 것이다! – Ancurio

답변

2

문제는 뷰에서 사용하고있는 QStyledItemDelegate 서브 클래스에서 발생했습니다. 위임자는 항목에 수평선을 그려야 했으므로 이 아니고은 sizehint 함수를 다시 구현하지만 추가 검사를 통해 하위 클래스가 잘못된 크기 힌트를 반환하고있는 것으로 보입니다.

따라서 DanielCastro의 조언을 따라 가면서 대리자 하위 클래스에서 가상 크기 힌트 기능을 사용했습니다.

1

여기서 언급 한 스타일이 효과가 있습니다. style-sheet 다음을 사용하여 I have attached과 동일한 출력을 생성하는지 확인하십시오. UI를 테스트하려면 Qt Designer을 사용하십시오. 외부 아무것도 당신의 style-sheet에 영향을주지 않습니다되어 있는지 확인합니다,

Settings->Preferences->Code->Print/Preview Configuration->Style Sheet 

Qt Designer를 사용하는 대신 앱이 자기 내부에이 스타일을 테스트 :

QTreeWidget{outline:0;} 

QTreeWidget::item 
{ 
    padding:5px; 
    background-color: rgb(235, 235, 235); 
    color: #1c1c1c; 
    border-right: 10px solid rgb(255, 170, 0); 
    font: 400 9.3pt "Segoe UI"; 
} 

QTreeWidget::item:has-children 
{ 
     border-right: 10px solid rgb(255, 0, 255); 
} 

당신은이 코드를 붙여 넣을 수 있습니다. 원하는대로 작동하면 문제는 다른 곳에서 발생합니다. 아마도 원하는 스타일을 덮어 쓰는 다른 스타일이있을 수 있습니다.

관련 문제