어떻게`setData` 메소드가 실패 할 수 있습니까?

Oct 01 2020

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 ()도 참조하십시오.

답변

2 eyllanesc Oct 01 2020 at 04:32

setData ()의 반환 값의 목적은 역할 및 QModelIndex와 관련된 정보가 편집되었는지 여부를 나타내는 것이며, true 또는 false를 반환하는지 여부는 개발자에 따라 다릅니다.

위를 설명하는 몇 가지 예 :

  • 모델을 편집 할 수 없게하려면 (기본적으로 모든 모델) 항상 false를 반환합니다.

  • 일부 항목 만 편집 가능하도록하거나 불가능하게하려면 항목에 따라 true 또는 false를 반환합니다.

  • 새 값이 특정 제한을 충족하기를 원하는 경우. 실용적인 예는 편집 할 항목이 연령이어야하므로 음수 값의 경우 false를 반환하고 다른 경우에는 true를 반환해야합니다.

1 Steve Oct 01 2020 at 04:33

메서드는 추상 클래스에 있으며 재정의 할 수 있습니다. 덮어 쓰면 새로운 구현에서 어떤 일이 발생할 수 있습니다.

기본 클래스 구현은 false를 반환합니다. 이 함수와 data ()는 편집 가능한 모델에 대해 다시 구현되어야합니다.

따라서 재정의 될 수있을뿐만 아니라 일부 경우에도 필요합니다. "성공"은 재정의 메서드의 구현 자에게 달려 있으며 true또는을 반환 할 수 있습니다 false.