J'ai un Comment puis-je le faire? p>
Merci d'avance. P> QTableView code> avec 4 lignes et 4 colonnes représentant chacune leurs données. Par défaut, le
QTableView code> est modifiable. Maintenant, je veux apporter une colonne particulière comme non modifiable dans mon
qtableview code>. p>
6 Réponses :
Vous pouvez utiliser le Vous pouvez également utiliser Les indicateurs dans votre modèle et supprimer Le drapeau SetItemDelegateForColumn () Code> une fonction>. Implémentez un délégué en lecture seule et définissez-le pour la colonne dont vous avez besoin. P>
qt :: détaillé code> pour une colonne spécifique. p>
Dans la méthode de remplacement, changez-le en si (! (index.column () == 0) Code> et Modifiez le drapeau code> de la valeur code> comme
drapeau | = Qt :: détaillée code>.
Cela fonctionne bien. P>
Je suppose que vous vouliez dire remplacer bool qabstractitemview :: edit (const qmodelindex & index, trigger, qevent * événement) code> n'est-ce pas? Dans ce cas, vous pouvez simplement retourner
faux code> pour une colonne en lecture seule.
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)
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 i> 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?
Quelque chose comme ça peut aussi le faire: utilisé: p>
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 () code> n'a pas empêché l'édition.
Le moyen le plus simple consiste à régler le drapeau de l'article que vous ne voulez pas être modifiable de cette manière: Vous pouvez également vérifier ce fil:
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;
}