Frage

Ich habe eine ONTEXT Methode, die zu einem rowsInserted SIGNAL des QAbstractItemModel verbindet, so kann ich benachrichtigt werden, wenn neue Zeilen eingefügt wurden:

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

Das Signal funktioniert gut, da ich benachrichtigt werde, wenn Zeilen eingefügt werden. Hier ist die ONTEXT Methode:

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();


}

Aber ich kann nicht scheinen zu können, die Zeichenfolge aus den eingefügten Elementen erhalten. Die QModelIndex „Eltern“ übergeben ist nicht gültig, und „m“ QAbstractItemModel ist NULL. Ich denke, sein, weil es kein tatsächlicher Artikel ist, sondern nur ein Zeiger auf ein? Wie kann ich einen Halt des eingefügten Textes / Elemente erhalten?

War es hilfreich?

Lösung

Wie die Eltern für Top-Level-Elemente ungültig sein wird, wäre eine weitere Option sein FTClientWidget Zugriff auf das Modell zu geben (wenn es nicht beabsichtigten Design nicht verletzt), und dann können FTClientWidget die Start- und End Argumente direkt auf die Verwendung Modell selbst:

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);
   }
}

Andere Tipps

Die Eltern werden immer für die Top-Level-Elemente unwirksam sein, so dass Sie es ungültig sein erwarten. Die Qt-Dokumentation hat eine gute Erklärung rel="nofollow von genau wie die Eltern funktioniert. start ist die erste Reihe, bei der ein Kind eingeführt wurde, und end ist die letzte Zeile in dem ein Kind eingefügt wurde.

Damit Sie darauf zugreifen können mit etwas wie folgt aus:

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);

Oder, wenn Sie möchten, können Sie den Index verwenden, um das Modell zu holen, von dem Sie darauf zugreifen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top