1
QAbstractTableModel에서 서브 클래 싱되는 사용자가 동일한 데이터를 내 모델에 입력하지 못하게하려고합니다.QTableView :: edit (const QModelIndex & index)가 실패했습니다
bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
bool result = false;
...
// Test if my model already has the same data
result = findItem(value.toString()) != -1;
...
if (result)
emit(dataChanged(index, index);
else
emit (dataInvalid(index));
return result;
}
지금은 신호를 잡아 다시 상태 편집에 (유형 QTableView인) 내 테이블보기를 설정해야합니다
void MyWindow::dataInvalid(const QModelIndex &index)
{
myTableView->edit(index);
}
를하지만 내 응용 프로그램을 실행할 때 콘솔에 메시지를 받았습니다 및 QTableView 편집 상태로 설정하지 않습니다
edit: edit failed
을 내가 잘못 뭐하는 거지? 미리 감사드립니다.
당신이보기에서 edit()를 호출 할 때 여전히 편집 모드이고 setData() 함수가 아직 종료되지 않았기 때문에 실패했다고 생각합니다. – vahancho
대단히 감사합니다, @vahancho! 'dataInvalid' 시그널에 연결할 때'Qt :: QueuedConnection'을 추가하여 작동합니다! 문제는'QTableView :: edit (const QModelIndex & index)'를 호출했을 때'QTableView'가'QAbstractItemView :: EditState'에 ** 여전히 ** 있었기 때문입니다. 감사합니다. – pau