2015-01-04 15 views
2

QTableView에 확인란이있는 열이 있습니다. 하여 체크 박스가 생성된다 오버라이드 data() 함수 QTableView의 편집 가능한 확인란 전용 열

  • 가 I 데이터
  • 행위에 따라 role == Qt::CheckStateRole하는 Qt::CheckState를 반환 재정의 flags 멤버 함수 Qt::ItemIsUserCheckable 복귀

    1. , 화면 참조.

      그러나 확인란 옆에 열에 편집 가능한 텍스트 상자가 있습니다. 내가 데모? 명확한 설명은 "dsdsdsds"를 입력이 텍스트 상자 (제거 할 수있는 방법, 체크 박스는 편집 있어야하고 아무것도.

      Readmode Editmode


      로를 요청한 경우 단순화 된 버전 만 표시 할 수 있습니다.

      Qt::ItemFlags MyClass::flags(const QModelIndex &index) const { 
      Qt::ItemFlags f = QAbstractListModel::flags(index); 
      ... return f if index is not target column .... 
      // for target column with checkbox 
      return (f | Qt::ItemIsEditable | Qt::ItemIsUserCheckable;) 
      } 
      
      
      QVariant MyClass::data(const QModelIndex &index, int role) const { 
          .. do something for other columns 
          .. for checkbox column 
          if (role != Qt::CheckStateRole) { return QVariant(); } 
          bool b = ... get value for checkbox column 
          Qt::CheckState cs = b ? Qt::Checked : Qt::Unchecked; 
          return QVariant(static_cast<int>(cs)); 
      } 
      

      Qt::ItemIsEditable 다음 확인란도 읽기 전용입니다. 나는 후에 비슷한 접근법을 가지고 SO answer을 발견했다.


      비고 : A checkbox only column in QTableView

    +0

    현재 코드를 표시 할 수 있습니까? 아니면 최소한의 완전한 예를 들어 주시겠습니까? – randomusername

    +0

    위 코드를 –

    +1

    @HorstWalter 위에 추가하면, Qt :: ItemIsEditable 플래그를 지우는 것은 어떨까요? –

    답변

    2

    의 중복 교체 첫 번째가를 만들 Qt를 알려줍니다

    Qt::ItemIsEnabled

    플래그로 플래그

    Qt::ItemIsEditable

    모델에있는 가치에 대한 편집자. 귀하의 경우 텍스트 작성자 인 것으로 보입니다. 값이 bool 인 경우 truefalse을 포함하는 드롭 다운 목록이 대신 표시됩니다.