2010-06-27 4 views
1

나는 무엇을 하려는지 직접 편집 할 수는 없지만 테이블 바깥의 일부 위젯에서 편집 할 수있는 테이블을 가지고있다. 즉, 선택된 노드를 여기에서 편집 할 수 있으며, 항상 표시되기를 원하기 때문에 모든 노드가 동일한 편집기를 사용합니다. 나는 무엇을 시도했다Qt : 하나의 에디터에게 위임

이 같은 QItemDelegate를 서브 클래스 그냥 내가 이미 가지고있는은 QTextEdit의 인스턴스를 반환하는 것입니다 :

당신이 파괴됩니다 편집기를 떠날 때를 제외하고, 작동
class Delegate extends QItemDelegate { 
    @Override 
    public QWidget createEditor(QWidget parent, QStyleOptionViewItem option, QModelIndex index) { 
     return qtextEdit; 
    } 
} 

. 아마도 위임은이 방법으로 사용되지 않아야합니다. 그럼 내가 어떻게 할 수 있니?

+0

closeEditor 멤버 함수를 다시 구현 했습니까? 이 메소드는 에디터 삭제/삭제를 담당하지 않는다고 생각합니다. –

+0

closeEditor 메소드가 없습니다. 거기에 신호 closeEditor 그래서 내가 그걸로 아무 상관이 생각. 그리고 어쨌든 그것의 최종, 그래서 그것은 무시 될 수 없습니다. – takoi

+0

Java에서 Qt를 간신히 이해할 수 있습니다. 나는 그것이 가능하다는 것을 안다. 그러나 이것이 그것이 무엇인지 깨닫는 것이 나를 길게 잡았다. ... – ianmac45

답변

2

QDataWidgetMapper 클래스는 외부 컨트롤에서 뷰 이외의 어떤 레코드의 값을 편집, 당신이 원하는 것을 정확히 (PS. 잠비하지만 C++ 코드를 사용하여 메신저 괜찮습니다). documentation에서 바로 촬영

, 이것은 당신이 그것을 사용하는 거라고하는 방법이다 : 당신이 볼 수있는 경우,

QDataWidgetMapper *mapper = new QDataWidgetMapper; 
mapper->setModel(model); 
mapper->addMapping(mySpinBox, 0); 
mapper->addMapping(myLineEdit, 1); 
mapper->addMapping(myCountryChooser, 2); 
mapper->toFirst(); 

을 그리고 (QTreeView/QListView/QTableView/등) 현재 선택한 편집 할 및 항목에 적절한 신호를 연결하십시오. & 슬롯 : connect(&view, SIGNAL(activated(QModelIndex)), mapper, SLOT(setCurrentModelIndex(QModelIndex)));

+0

예. * 정확하게 * 원했던 것입니다. 감사!:) – takoi