2

QAbstractItemModelのrowsInsertedSIGNALに接続する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です。それは実際のアイテムではなく、単なるポインタだからだと思いますか?挿入されたテキスト/要素を取得するにはどうすればよいですか?

4

2 に答える 2

2

親はトップレベルのアイテムに対して無効になるため、別のオプションとして、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);
   }
}
于 2009-07-30T20:29:29.513 に答える
1

親は常に最上位のアイテムに対して無効になるため、無効であると予想できます。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);

または、必要に応じて、インデックスを使用して、アクセス可能なモデルを取得できます。

于 2009-07-29T21:30:18.027 に答える