9
votes

QT - Comment puis-je faire une colonne particulière de mon QTableView comme non modifiable?

J'ai un QTableView avec 4 lignes et 4 colonnes représentant chacune leurs données. Par défaut, le QTableView est modifiable. Maintenant, je veux apporter une colonne particulière comme non modifiable dans mon qtableview .

Comment puis-je le faire?

Merci d'avance.


0 commentaires

6 Réponses :


11
votes

0 commentaires

0
votes

Dans la méthode de remplacement, changez-le en si (! (index.column () == 0) et Modifiez le drapeau de la valeur comme drapeau | = Qt :: détaillée .
Cela fonctionne bien.


1 commentaires

Je suppose que vous vouliez dire remplacer bool qabstractitemview :: edit (const qmodelindex & index, trigger, qevent * événement) n'est-ce pas? Dans ce cas, vous pouvez simplement retourner faux pour une colonne en lecture seule.



0
votes

Peut être aussi tard, mais pour la référence future. Vous devez définir la vue Table sur NOEDITTRigger code> comme ceci:

myTableView->setModel(model);
myTableView->setEditTriggers(QAbstractItemView::NoEditTriggers)


2 commentaires

WOW, c'est la solution la plus propre que j'ai vue jusqu'à présent, surtout si vous voulez seulement que les données ne soient en lecture seule dans une de votre point de vue sur le même modèle. Merci!


Mais comment cette méthode peut-elle être appliquée à une seule colonne ou à une rangée, alors que OP demande?



9
votes

Quelque chose comme ça peut aussi le faire: xxx

utilisé: xxx


2 commentaires

Le retour VRAI au lieu de FALSE en Editorevent empêchera que Createeeditor d'être appelé du tout, car elle consomme l'événement à ce stade.


@Ricekab Je ne suis pas sûr que ce soit vrai: le DOC dit "La mise en œuvre de la base retourne false (indiquant qu'elle n'a pas géré l'événement)". Et selon une expérience, je viens de revenir au faux pour un index.colum () n'a pas empêché l'édition.



4
votes

Le moyen le plus simple consiste à régler le drapeau de l'article que vous ne voulez pas être modifiable de cette manière: xxx

Vous pouvez également vérifier ce fil: < / p>


0 commentaires

0
votes

Vous devez remplacer em> la méthode 'drapeaux' em> et spécifiez les paramètres d'édition de l'élément pour la colonne sélectionnée

Qt::ItemFlags TableModel::flags(const QModelIndex &index) const
{
    if(!index.isValid())
        return Qt::NoItemFlags;
    if(index.column() == SELECTED_COLUMN_NUM)
    {
        return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
    }
    return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
}


0 commentaires