QTableView의 셀을 Qt에서 위쪽 및 아래쪽 버튼을 누른 상태로 만드는 가장 좋은 방법은 무엇입니까?
-
13-09-2019 - |
문제
나는 세포를 만들려고 노력 중입니다. 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.backgroundBrus
h는 sizeHint
방법은 유효하지 않습니다 paint
방법 . 나는 이제 이유를 봅니다 sizeHint
배경 브러시와 paint
방법이 아닙니다. 나는 그것을 노키아에보고 할 것이다.
편집하다:
내가 옳은 것 같고 <qt4.5의 버그.
qstyleOptionViewItemv4는 아이콘과 BackgroundBrush를 복사하지 않습니다
테이블 셀 행의 ID/행 카운트를 얻을 수없는 다음 색상 테이블에 대해 확인하고 그에 따라 색상을 설정할 수 있습니까? 당신의 질문을 잘 이해했는지 확실하지 않습니다.
배경색에 대한 데이터 역할을 할당하고 항목 대의원에서 모델 인덱스에게 배경색이 무엇인지 물어보십시오 (사용 data( bg_color_role )
또는 비슷한 것). 그런 다음 모델에서 데이터 기능이 bg_color_role
모델링되는 데이터에 적합합니다.
이를 수행하는 방법은 페인트 메소드에서 얻는 QModelIndex 객체의 데이터 방법을 사용하고 특정 역할을 요청하는 것입니다 (사용자 정의 모델을 정의하는 경우 고유 한 역할을 추가하고 필요한 정보를 제공 할 수 있습니다. 그 역할의 대표.)
TIMW, 이전에 initStyleOption에 전화하여 QStyleOptionViewItemv4 정보를 채워야한다고 생각합니다.
배경 이미지의 요구 사항이 어디에서 왔는지 잘 모르겠습니다. 세포가 모양을 원한다면 QPushButton
s, 당신은 아마도 상속해야합니다 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 버튼 이미지를 그릴 수 있습니다.