Hilfe eingefügte Daten nach Qt immer rowInserted Signal
-
05-07-2019 - |
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?
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.