어떻게`setData` 메소드가 실패 할 수 있습니까?
QAbstractItemModel.setData아래에서 재현 한에 대한 문서 에서는 메서드가 성공하면 true를 반환하고 그렇지 않으면 false를 반환해야한다고 말합니다. 내 질문은 다음과 같습니다.이 방법이 어떻게 성공하지 못할 수 있습니까?
bool QAbstractItemModel :: setData (const QModelIndex & index, const QVariant & value, int 역할 = Qt :: EditRole)
인덱스의 항목에 대한 역할 데이터를 값으로 설정합니다.
성공하면 true를 반환합니다. 그렇지 않으면 거짓을 반환합니다.
데이터가 성공적으로 설정되면 dataChanged () 신호를 내 보내야합니다.
기본 클래스 구현은 false를 반환합니다. 이 함수와 data ()는 편집 가능한 모델에 대해 다시 구현되어야합니다.
참고 :이 함수는 Meta Object 시스템과 QML에서 호출 할 수 있습니다. Q_INVOKABLE을 참조하십시오.
Qt :: ItemDataRole, data () 및 itemData ()도 참조하십시오.
답변
setData ()의 반환 값의 목적은 역할 및 QModelIndex와 관련된 정보가 편집되었는지 여부를 나타내는 것이며, true 또는 false를 반환하는지 여부는 개발자에 따라 다릅니다.
위를 설명하는 몇 가지 예 :
모델을 편집 할 수 없게하려면 (기본적으로 모든 모델) 항상 false를 반환합니다.
일부 항목 만 편집 가능하도록하거나 불가능하게하려면 항목에 따라 true 또는 false를 반환합니다.
새 값이 특정 제한을 충족하기를 원하는 경우. 실용적인 예는 편집 할 항목이 연령이어야하므로 음수 값의 경우 false를 반환하고 다른 경우에는 true를 반환해야합니다.
메서드는 추상 클래스에 있으며 재정의 할 수 있습니다. 덮어 쓰면 새로운 구현에서 어떤 일이 발생할 수 있습니다.
기본 클래스 구현은 false를 반환합니다. 이 함수와 data ()는 편집 가능한 모델에 대해 다시 구현되어야합니다.
따라서 재정의 될 수있을뿐만 아니라 일부 경우에도 필요합니다. "성공"은 재정의 메서드의 구현 자에게 달려 있으며 true또는을 반환 할 수 있습니다 false.