質問

新しい行が挿入されたときに通知できるように、QAbstractItemModelのrowsInserted SIGNALに接続する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の「親」渡された値は無効で、" m" QAbstractItemModelは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