2012-01-09 5 views
0

현재 QTableView에서 파생 된 클래스에 편집 기능을 추가하려고합니다. 편집 기능을 제공해야하는 사용자 지정 대리자를 추가했습니다. 그러나 위임자의 시작 부분에 간단한 qDebug() << "FieldDelegate::createEditor()";을 작성하면이 함수가 호출되지 않는다는 것을 알 수 있습니다. 나는 Qt4 문서와 "C++ Gui Programming with QT4"책에서 예제를 살펴 보려고했지만 QTableWidgets이면서 QTableViews이 아닌 대표자의 예는 모두 찾을 수있었습니다. 그러나 제 경우에는 사용자 정의 데이터 모델이 필요하므로 QTableWidgetItems에있는 데이터를 복제하고 싶지는 않습니다. QTableView 편집 방법

  • 내가
  • QAbstractItemModel::setItemDelegate()가 나는 것도이에서 발생하지 않는 항목을 더블 클릭하면

setEditTriggers(QAbstractItemView::DoubleClicked)를 사용하여 편집 기능을 활성화하여 사용자 정의 대리자를 추가 :

지금까지 나는 다음과 같은했다 설정. FieldDelegate::createEditor()은 전혀 호출되지 않습니다.

는 또한 같은 클래스의 edit() 슬롯에 QAbstractItemView에서 doubleClicked() 신호를 연결했지만, 내가 셀을 두 번 클릭 할 때마다이는 나에게 메시지 edit: editing failed을 제공합니다.

지금까지 DatabaseModel::data() 메서드에서 Qt::EditRole보다 다른 역할을 반환하지 않았습니다. 이것은 새로운 데이터를 추가하는 데 사용할 테이블의 맨 아래에 빈 행을 추가하려는 최종 사례와 유사합니다. 이것은 문제를 일으킬 수 있습니까?

DocumentChoiceView::DocumentChoiceView(DatabaseModel * model, 
              QWidget * parent) : 
    QTableView(parent), 
    m_model(model) 
    { 
    setShowGrid (false); 
    setModel(m_model); 
    setItemDelegate(m_model->delegate().get()); 
    setEditTriggers(QAbstractItemView::DoubleClicked); 
    connect(this, SIGNAL(doubleClicked(const QModelIndex&)), 
      this, SLOT(edit(const QModelIndex&))); 
    verticalHeader()->hide(); 
    } 
+0

당신은 모델에서 적절한 플래그를 반환하고 있습니까? http://doc.qt.nokia.com/4.7-snapshot/model-view-programming.html#making-the-model-editable –

+0

@ KimBowlesSørhus : 예, 이것이 문제인 것처럼 보입니다. 나는 튜토리얼에 많은 부분을 집중 시켰고 실제 문서에서는 충분하지 않았다고 생각한다. 모든 것이 이제는 잘됩니다. 이것을 당신이 대답으로 만들면 나는 그것을 받아 들일 것입니다. – LiKao

답변