2015-11-28 1 views
0

J'ai regardé autour pendant un bon moment maintenant et je n'ai pas été capable de trouver une solution pour essayer de renommer des articles dans un QTreeView. Fondamentalement, ce que je veux dire par là, c'est quand vous double-cliquez sur quelque chose dans le QTreeView vous avez la possibilité de renommer l'élément. Quand l'utilisateur a terminé d'éditer le nom j'ai besoin d'un signal qui me dira l'index dans l'arbre ou le QStandardItem qui a été édité afin que je puisse changer ce nom d'éléments particulier qui est attaché au QStandardItem.Renommer les articles QTreeView

Cela peut être un peu vague, je ne peux pas vraiment fournir ma source pour cela, car il faudrait que je vous donne mon projet entier qui est un couple de concerts. Si vous avez besoin de moi pour expliquer quoi que ce soit d'autre, je ferai de mon mieux, j'inclurai également une image de ce dont je parle pour une meilleure compréhension.

Double Click Renaming

Répondre

0

En fait ce que je veux dire par là, lorsque vous cliquerez quelque chose dans le QTreeView vous avez la possibilité de renommer l'élément.

Utilisez la fonction setFlags() de QStandardItem pour définir Qt::ItemIsEditable:

#include <QtWidgets> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QMainWindow w; 
    QTreeView *treeView = new QTreeView; 
    QStandardItemModel model(4, 1); 
    for (int row = 0; row < 4; ++row) { 
     QStandardItem *item = new QStandardItem(QString("row %0").arg(row)); 
     item->setFlags(item->flags() | Qt::ItemIsEditable); 
     model.setItem(row, 0, item); 
    } 
    treeView->setModel(&model); 
    w.setCentralWidget(treeView); 
    w.show(); 

    return a.exec(); 
} 

le drapeau binaire entre Qt::ItemIsEditable avec les drapeaux existants est important, parce que sinon vous allez finir avec les éléments désactivés. Par exemple, voici les drapeaux après avec celles binaire entre existantes:

QFlags<Qt::ItemFlags>(ItemIsSelectable|ItemIsEditable|ItemIsDragEnabled|ItemIsDropEnabled|ItemIsEnabled) 

Et sans ceux qui existent déjà:

QFlags<Qt::ItemFlags>(ItemIsEditable) 

Lorsque l'utilisateur est fait modifier le nom que j'ai besoin d'un signal cela me dira l'index dans l'arbre ou le QStandardItem qui a été édité afin que je puisse changer ce nom d'éléments particulier qui est attaché au QStandardItem.

Vous pouvez vous connecter au signal dataChanged() de QStandardItemModel:

QObject::connect(&model, SIGNAL(itemChanged(QStandardItem*)), 
    &myObject, SLOT(onItemChanged(QStandardItem*)));