QTableView의 셀을 Qt에서 위쪽 및 아래쪽 버튼을 누른 상태로 만드는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/970618

문제

나는 세포를 만들려고 노력 중입니다. QTableView 3D 클릭 가능한 버튼처럼 보입니다.따라서 셀을 클릭하면 버튼이 눌려진 것처럼 보입니다. 모두가 내가 단순히 색상을 변경하고 싶다고 생각하는 것 같습니다. 일반 버튼과 3차원으로 보이는 푸시된 버튼의 이미지를 보여줘야 합니다.

나는 전화로 이미 이 작업을 수행했습니다. QTableView::setItemDelegate(), 적절한 ItemDelegate 클릭하면 셀의 배경이 변경됩니다.그러나 일부 셀이 포함된 데이터에 따라 다른 색상의 버튼이 되기를 원하기 때문에 이 시점에서 멈췄습니다.따라서 숫자가 낮은 셀은 빨간색 버튼이 되고, 클릭해도 빨간색이 되며, 다른 셀은 다른 색상이 됩니다.

버튼의 색상을 설정할 수 있습니다. TableModel, 하지만 일단 버튼을 클릭하면 다음을 수행할 수 있는 방법이 없습니다. ItemDelegate 다른 색과 다르다는 것을 알 수 있습니다.두 가지를 어떻게 연결하여 ItemDelegate 무슨 색인지 알아?

또한 셀을 버튼처럼 보이게 만드는 더 좋은 방법이 있습니까?

도움이 되었습니까?

해결책

전화해도됩니다 QModelIndex::model() 내부에서 ItemDelegate'에스 paint() 방법이 있기 때문에 QModelIndex 매개변수.이것은 당신에게 다음을 제공합니다 TableModel 데이터의 경우 셀 버튼의 색상을 프로그래밍 방식으로 결정할 수 있습니다.

그러나 이것은 여전히 ​​내가 바라는 것만큼 우아하지 않습니다.위쪽 및 아래쪽 버튼을 누른 상태에서 테이블 셀의 모양을 변경하는 더 좋은 방법을 아는 사람이 있습니까?

다른 팁

배경색에 대한 색인을 물어 보지 않겠습니까?

이 같은 ...

QStyleOptionToolButton buttonOption;
const QStyleOptionViewItemV4& optionV4 = dynamic_cast<QStyleOptionViewItemV4&>(option);
//...
buttonOption.palette.setBrush( QPalette::Button, index.data( Qt::BackgroundColorRole ) ); 
//...

나는 그것의 QT의 버그이고 그랬다는 느낌이 들었습니다.

// model code  
if(role==Qt::BackgroundColorRole )
    return qvariant_cast<QBrush>( QBrush(Qt::red) );

// delegate code 
buttonOption.palette.setBrush(QPalette::Button, optionV4.backgroundBrush );

때문에 optionV4.backgroundBrush는 sizeHint 방법은 유효하지 않습니다 paint 방법 . 나는 이제 이유를 봅니다 sizeHint 배경 브러시와 paint 방법이 아닙니다. 나는 그것을 노키아에보고 할 것이다.

편집하다:

내가 옳은 것 같고 <qt4.5의 버그.
qstyleOptionViewItemv4는 아이콘과 BackgroundBrush를 복사하지 않습니다

테이블 셀 행의 ID/행 카운트를 얻을 수없는 다음 색상 테이블에 대해 확인하고 그에 따라 색상을 설정할 수 있습니까? 당신의 질문을 잘 이해했는지 확실하지 않습니다.

배경색에 대한 데이터 역할을 할당하고 항목 대의원에서 모델 인덱스에게 배경색이 무엇인지 물어보십시오 (사용 data( bg_color_role ) 또는 비슷한 것). 그런 다음 모델에서 데이터 기능이 bg_color_role 모델링되는 데이터에 적합합니다.

이를 수행하는 방법은 페인트 메소드에서 얻는 QModelIndex 객체의 데이터 방법을 사용하고 특정 역할을 요청하는 것입니다 (사용자 정의 모델을 정의하는 경우 고유 한 역할을 추가하고 필요한 정보를 제공 할 수 있습니다. 그 역할의 대표.)

TIMW, 이전에 initStyleOption에 전화하여 QStyleOptionViewItemv4 정보를 채워야한다고 생각합니다.

배경 이미지의 요구 사항이 어디에서 왔는지 잘 모르겠습니다. 세포가 모양을 원한다면 QPushButtons, 당신은 아마도 상속해야합니다 QItemDelegate 그리고 구현 paint() 사용 QStyle 당신을 그리려면 QPushButton, 이 같은:

QStyleOptionButton opt;
// fill 'opt' from the information from the model, and the style option that's passed in
style()->drawControl( QStyle::CE_PushButton, &opt, painter );

맞춤형 스타일 시트를 사용해 보셨습니까?

모든 셀에 동일한 스타일 시트를 적용한 다음 배경 이미지 / 스타일을 변경하여 선택되었는지 여부에 따라 3D 버튼 이미지를 그릴 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top