2012-04-09 1 views
1

모델에 QString 기반 항목이있는 QTableView가 있습니다. 내 테이블 모델에서 setData를 구현 했으므로 편집이 작동합니다 (셀에서 데이터를 변경할 수 있고 모델을 업데이트하기 위해 setData가 호출되며 테이블이 제대로 업데이트 됨).Qt : 편집이 끝난 후에 QTableView 항목 데이터가 편집되는 동안 신호가 발생합니까?

현재 setData는 사용자가 편집을 마친 경우에만 호출됩니다. Enter를 누르거나 텍스트 입력 상자를 클릭 한 후 텍스트 입력을 마무리합니다. 사용자가 텍스트 편집 컨트롤에 입력/편집하는 동안 테이블의 다른 부분을 업데이트하려고합니다. 편집 작업이 끝나고 편집 된 내용이 마무리 된 것입니다.

내가 갖고 싶은 간단한 예제는 다음 테이블 셀에 편집중인 셀에 입력 된 문자 수를 표시하는 것이지만 사용자가 셀 내용을 입력/편집 할 때 수행합니다 , 편집이 완료되고 setData가 호출 된 후에가 아닙니다.

나는 무엇을 찾고 있어야합니까? 감사!

답변

1

QStyledItemDelegate의 하위 클래스를 만들고 변경 될 때마다 데이터를 커밋 한 다음 QAbstractItemView::setDelegateForColumn이라는보기에 해당 대리자를 설정할 수 있습니다.

class MyDelegate : public QStyledItemDelegate { 
    QSignalMapper *mapper; 
public: 
    MyDelegate(QObject*parent = 0) 
    : QStyledItemDelegate(parent) 
    , mapper(new QSignalMapper(this)) 
    { 
     connect(mapper, SIGNAL(mapped(QWidget*)), SIGNAL(commitData(QWidget*))); 
    } 
    QWidget * createEditor(QWidget * parent, const QStyleOptionViewItem & option, 
      const QModelIndex & index) const 
    { 
     QWidget *editor = QStyledItemDelegate::createEditor(parent, option, index); 
     if(qobject_cast<QLineEdit*>(editor)) { 
      connect(editor, SIGNAL(textChanged(QString)), mapper, SLOT(map())); 
      mapper->setMapping(editor, editor); 
     } 
     return editor; 
    } 
};