2014-07-09 6 views
0

QAbstractItemModel에서 상속 된 사용자 정의 모델과 QAbstractItemView에서 상속 된 사용자 정의보기가 있습니다. 모델은 나무로 구성된 데이터의 랩입니다. 모델이 변경되면 뷰에 변경 사항을 알리는 데 필요한 신호를 내 보냅니다. 보기에는 기본 항목 대리인이 있습니다.사용자 정의 위젯을 설정하기 위해 QTreeView에서 항목 생성 순간을 잡습니다.

이제보기의 모든 항목에 대한 사용자 정의 위젯을 작성하여 QAbstractItemView :: setIndexWidget()을 사용하여 설정합니다. 뷰에서 모든 항목을 생성하고 처리하여 어떻게 만들 수 있습니까?

+0

'QAbstractItemModel :: rowsInserted()'신호는 어떻게됩니까? – vahancho

+0

@vahancho 모델을 변경 한 후에 이미 터가 될 수있는 신호가 두 개 이상 있습니다 (rowsInserted 및 layoutChanged). 나는 둘 다들을 수 있으며, 첫 번째 경우 특정 행에 대한 사용자 정의 위젯을 작성하고 두 번째 경우에는 모두 작성합니다. 그러나 이것은 좋은 방법입니까 아니면 더 좋은 방법입니까? 또한 기본 뷰 클래스 다음에 신호를 가져와야합니다. 기본 클래스 다음에 모델에 연결하면 기본 클래스 이후에 이러한 신호가 보장됩니까? – GLaz

+1

사용자 정의 [itemdelegate] (http://qt-project.org/doc/qt-5/qabstractitemview.html#itemDelegate-2)를 사용하는 것이 더 낫습니다. 필요한 경우 편집자에게만 묻습니다. –

답변

0

itemdelegate을 사용하는 것이 좋습니다.

class MyItemDelegate: public QAbstractItemDelegate 
{ 
Q_OBJECT 

    QWidget *widget; 

public: 
    MyItemDelegate(QObject *p):QAbstractItemDelegate(p) 
    { 
    //create widget 
    } 


    void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const 
    { 
     //initialize painting widget 
     widget->render(painter); 
    } 

}