QT의 RowInserted 신호 후에 삽입 된 데이터를 얻는 데 도움이됩니다
-
05-07-2019 - |
문제
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);
또는 원하는 경우 색인을 사용하여 액세스 할 수있는 모델을 검색 할 수 있습니다.
제휴하지 않습니다 StackOverflow