문제

QABSTRARTITEMMODEL의 ROWSINSTERED 신호에 연결하는 OnText 메소드가 있으므로 새 행이 삽입되었을 때 알 수 있습니다.

QObject::connect(model, SIGNAL(rowsInserted ( const QModelIndex & , int , int  )  ),
                        client_,SLOT(onText( const QModelIndex & , int , int  )) )

행이 삽입 될 때 알림을 받으므로 신호는 잘 작동합니다. 다음은 OnText 메소드입니다.

void FTClientWidget::onText( const QModelIndex & parent, int start, int end ) 
{
    Proxy::write("notified!");

    if(!parent.isValid())
        Proxy::write("NOT VALID!");
    else
        Proxy::write("VALID");

     QAbstractItemModel* m = parent.model();


}

그러나 삽입 된 항목에서 문자열을 얻을 수없는 것 같습니다. 통과 된 QModelIndex "Parent"는 유효하지 않으며 "M"QABSTRANTITEMMODEL은 NULL입니다. 나는 그것이 실제 항목이 아니라 단지 하나에 대한 포인터이기 때문이라고 생각합니까? 삽입 된 텍스트/요소를 어떻게 보유합니까?

도움이 되었습니까?

해결책

부모가 최상위 항목에 대해 유효하지 않으므로 다른 옵션은 FTClientWidget 모델에 대한 액세스를 제공하는 것입니다 (의도 한 디자인을 위반하지 않는 경우) FTClientWidget은 모델 자체에서 시작 및 종료 인수를 직접 사용할 수 있습니다.

void FTClientWidget::onText( const QModelIndex & parent, int start, int end ) 
{
   //Set our intended row/column indexes 
   int row = start;
   int column = 0;

   //Ensure the row/column indexes are valid for a top-level item
   if (model_->hasIndex(row,column))
   {
      //Create an index to the top-level item using our 
      //previously set model_ pointer
      QModelIndex index = model_->index(row,column);

      //Retrieve the data for the top-level item
      QVariant data = model_->data(index);
   }
}

다른 팁

부모는 항상 최상위 항목에 대해 유효하지 않으므로 유효하지 않을 것으로 기대할 수 있습니다. QT 문서는 양호합니다 설명 부모가 어떻게 작동하는지 정확히. start 아이가 삽입 된 첫 번째 줄이며 end 아이가 삽입 된 마지막 줄입니다.

따라서 다음과 같은 것으로 액세스 할 수 있습니다.

int column = 0;

// access the first child
QModelIndex firstChild = parent.child(first, column);
QModelIndex lastChild = parent.child(end, column);

// get the data out of the first child
QVariant data = firstChild.data(Qt::DisplayRole);

또는 원하는 경우 색인을 사용하여 액세스 할 수있는 모델을 검색 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top