2017-02-27 4 views
0

J'ai passé la dernière semaine à avoir du mal à créer un QModelIndex avec une ligne et une colonne. Sinon, je me contenterais de changer la valeur de row() dans un QModelIndex déjà existant.Création d'un QModelIndex

Toute aide serait appréciée.

Edit:

QModelIndex nIndex = QAbstractItemModel::createIndex(1, 2); 
int b = nIndex.row(); 
qInfo() << "b" << b; 

échoue avec l'erreur:

cannot call member function ‘QModelIndex QAbstractItemModel::createIndex(int, int, void*) const’ without object 
     QModelIndex nIndex = QAbstractItemModel::createIndex(1, 2); 
                   ^

L'objectif à portée de main est la suivante:

J'ai une fonction:

void MyClass::doStuff(QModelIndex index) 

intérieur de cette classe , Je fais essentiellement e suit:

if (index.column() != 1) 
{ 
    int a=index.row(); 
} 

Donc, mon objectif est d'appeler cette fonction à partir d'une autre classe et passer un QModelIndex, mais pour cet indice ait été créé avec une ligne/colonne je précise.

Répondre

1

Je ne suis pas sûr que ce soit ce que vous voulez, mais vous pouvez simplement créer un QModelIndex avec la méthode QAbstractItemModel::index(row, column) (http://doc.qt.io/qt-5/qabstractitemmodel.html#index) !? D'un autre côté, cela semble être trop simple pour que vous puissiez vous débattre pendant si longtemps, peut-être expliquer un peu plus.

Exemple:

QAbstractTableModel *model = ...; 

// then you can do something like 
QModelIndex nIndex = model->index(1,2); 
int b = nIndex.row(); 
qInfo() << "b" << b; 
+0

Je pense que le vrai combat vient d'être nouveau à Qt. Je pense que ce que vous avez dit est ce que je veux et que j'ai essayé; Cependant, la lutte continue. J'ai mis à jour mon post initial pour avoir plus d'infos. Je vous remercie! –

+0

J'ai changé ma réponse, le premier lien était faux désolé, vous pouvez utiliser le 'QAbstractItemModel :: index' (pas' createIndex', qui est protégé), et si vous êtes nouveau, vous ne pouvez pas l'appeler comme ça c'est pas statique. Vous avez besoin d'un "modèle de données" valide dans lequel vous stockez les données et sur ** que ** appelez la méthode 'index'. Je suppose que vous avez un modèle quelque part, quoi d'autre est le point d'obtenir un 'QModelIndex'? – xander

+0

@MetalWing J'ai ajouté un petit exemple à ma réponse, mais cela dépend de ce que vous utilisez réellement comme modèle, je n'en ai aucune idée. :) – xander

4

Vous pouvez obtenir un nouvel indice du modèle approprié, en utilisant sa méthode index().

Si vous avez déjà un indice du modèle, avec le même parent que l'index désiré, vous pouvez obtenir un autre indice en utilisant la méthode sibling() de cet indice:

void MyClass::doStuff(const QModelIndex& index) 
{ 
    // get the value at row zero, same column 
    const QModelIndex header = index.sibling(0, index.column()); 
} 

L'indice lui-même est immuable une fois créé - vous ne pouvez pas modifier sa ligne, sa colonne ou son parent (sauf en l'invalidant avec les modifications apportées au modèle derrière son dos).