J'ai écrit un modèle de données personnalisé à afficher avec plusieurs QTableViews.
Techniquement, tout fonctionne bien: Mes vues montrent les modifications apportées à partir de mon modèle. Mon modèle de données est modifitable et la méthode Cependant, mon problème est que je dois déplacer ma souris sur un aucune idée? Merci, p> Il peut être pertinent de mentionner que je n'utilise pas le rôle Voici ce que je cherche: mon modèle de données contient des propriétés sur la manière d'afficher les données, utilisées pour générer des feuilles de style qui sont dirigées vers les vues. P> Ainsi, lors de la modification du modèle, pour chaque vue, tous ses éléments sont touchés, c'est pourquoi le signal J'ai aussi essayé d'émettre Voici un extrait du setingdata () code> est émettant le signal datachanged () code> signal et renvoie true code> sur une édition réussie. P > qtableview code> pour montrer le changement réel, alors que j'aimerais que toutes les vues affichent les modifications lorsqu'elles ont été faites, sans Besoin d'interagir avec les vues pour qu'ils soient mis à jour. P>
qt :: éditrole code> pour éditer des données, mais plutôt une valeur d'énumération personnalisée (nommée activerole code>). P> datachanged () code> est envoyé avec des indices couvrant toutes les cellules. P> layoutChanged () code>, mais il ne semble pas modifier le comportement dans mon cas. P> setdata () Code> Méthode: P> QWidget* DataModelDelegate::createEditor(QWidget* parent, QStyleOptionViewItem const& option, QModelIndex const& idx) const
{
auto editor = new DataModelEditor(parent);
connect(editor, SIGNAL(activeItem()), this, SLOT(commitEditorData()));
return editor;
}
3 Réponses :
Appelez-vous le setingdata () code>? Est le signal datachanged () code> vraiment émis? Connectez-vous un emplacement de journalisation de débogage. J'ose spéculer que c'est un problème très similaire à la vôtre: p>
Les données sont correctement modifiées, DataChanged CODE> est émis si nécessaire, dans SetData code>; Les changements apparaissent immédiatement sur la vue que j'interagie avec. Le seul problème est que la vue Autre i> Afficher les mêmes données doit avoir la souris dessus pour montrer les modifications. Je prospète avec votre lien!
A propos du lien, le problème est que le modèle de données est modifié mais non via des moyens QT, ce qui ne émet donc pas le signal code> datachanged code>; Pas mon cas cependant: - /
Comment puis-je le faire de l'extérieur du modèle? C'est-à-dire sans le qmodelindex code> es? Je ne peux pas faire qmodelindex code> es des index entier car le constructeur est privé.
J'ai trouvé le problème, lequel était que mon autre point de vue n'était pas correctement informé des modifications de données: Mes vues ont chacun montré différentes parties de mes données, de sorte que les autres vues devaient être informées du Sur une note latérale, j'ai également eu le problème de mettre à jour mes points de vue lorsque mon application QT n'était pas la fenêtre active de mon gestionnaire de fenêtres. La solution consistait à appeler DataChaged () code>, mais pour leurs propres indices. p>
repeindre () code> sur la fenêtre principale. P>
La solution (appelant repeindre () code>) n'a pas fonctionné pour moi. De plus, imo, la réponse n'est pas complète. Devrait décrire ou donner des exemples sur la manière d'utiliser dataCanged () code> dans le code pour atteindre l'effet attendu.
J'ai rencontré le même problème et permettez-moi d'ajouter une explication détaillée aux réponses de PIWI. Si vous modifiez les données et que vous devez mettre à jour les colonnes simples ou plusieurs colonnes (ou lignes, en fonction de votre exigence), vous devez émettre un ensemble d'index pour basft à bowright.Pour exemple, si vous avez une table comme ci-dessous:
p>
et, vous avez maintenant modifié certaines données et souhaitez maintenant Mettez à jour la ligne de cellule 1, la colonne 1-2, puis vous devez émettre un signal DataChange < / a> p>
Comment puis-je le faire de l'extérieur du modèle? C'est-à-dire sans le qmodelindex code> es?
Pourriez-vous montrer le code de la fonction
setingdata () code>?Votre SetData fonctionne donc sur la coutume Activerole B> au lieu de standard éditrole / displayrole b>, mais quel rôle vous définissez-vous sur les éléments? Supprimez-vous aussi
data () code>? Avez-vous un délégué de rendu personnalisé pour votre point de vue?J'ai mis à jour ma question avec une implémentation de données, SetData, CreateeeDitor et telle. J'espère que cela t'aides!