J'essaie de créer un Qtreeeeview et d'utiliser un modèle personnalisé pour cela. J'ai placé des énoncés Le code du modèle est inférieur à p> qdebug () code> à divers endroits et j'ai déterminé que
données () code> est jamais fort> être appelé. Comment puis-je résoudre ce problème?
#include "MainWindow.h"
#include "ui_MainWindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
NeuralNetwork* network = new NeuralNetwork();
modelNeural = new ModelItemNeural();
modelNeural->setRootNode(network);
ui->treeView->setModel(modelNeural);
update();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionNew_triggered()
{
NeuralNetwork* network = new NeuralNetwork();
modelNeural->setRootNode(network);
ui->treeView->update();
}
3 Réponses :
Avez-vous ajouté le modèle (pas l'article) au contrôle TreeView? Avez-vous créé des articles de votre type dérivé et les ajoutez au modèle? Les données () doivent être appelées si votre modèle est accessible. P>
Oui, j'ai les deux définir le modèle sur TreeView et créé un élément pour ce modèle. Étant donné que le modèle envoyé à l'arborescence est un pointeur, il ne devrait pas d'importer la commande que je fais cela (Ajouter à TreeView VS Ajoutez l'élément au modèle).
Si vous n'avez pas connecté le modèle à la vue sur l'arborescence avant d'ajouter l'élément au modèle, les signaux indiquent que la vue de la mise à jour ne serait pas vue. C'est peut-être un problème de rafraîchissement? Je remarque également que vous créez vos propres index. L'index n'est peut-être pas valide, donc il ne tente jamais d'aller chercher des données à l'aide de cet index? Si vous n'avez pas besoin de indices spéciaux, j'utiliserais la méthode à partir d'une classe de base. Moins à aller mal;)
Je pensais index () était pur virtuel
Ah désolé. J'ai utilisé une classe non abstraite et héritée de celle-ci. Ils fournissent la plupart des méthodes et je n'avais pas besoin de les changer.
Le problème est ce fragment:
int ModelItemNeural::rowCount(const QModelIndex& parent) const { if (parent.isValid() == false) { return 0; }
J'ai fait ce changement et que les données () ne sont toujours pas appelées. Cependant, maintenant RowCount () retourne 0 (ce qui est correct). Les seules autres fonctions étant appelées sont HeaderData ()
@jecjackal Si votre arbre est effectivement vide, pourquoi vous attendez-vous à ce que des données () soient appelées? Ajoutez d'abord quelques lignes (haut niveau). Un ou un mille, peu importe.
J'ai un article là-bas (l'élément racine). Dois-je appeler "INSERTROWS ()" manuellement? Je vais donner cela un coup.
Je viens de trouver un exemple qui est venu avec le QT SDK 2.2.1. Son appelé "édittablereemodel". Ce n'est pas situé sur la page d'accueil où beaucoup d'exemples sont stockés. Ce modèle fait exactement ce que j'essaie de faire. Merci pour l'aide tous
Vous devez remplacer la méthode suivante dans votre classe héritée QabstractTemModemModemModel: P>
Puis écrivez ceci dans: p>
quelque chose comme ceci: p>
Index QModelindex (Int ligne, colonne INT, const qmodelindex & parent = qmodelindex ()) const; code> p> p>
retour Créerindex (rangée, colonne, nullptr); code> p>
index qmodelindex (int ligne, colonne INT, const qmodelindex & parent) const {
Retour Createindex (rangée, colonne, nullptr);
} code> p>
Votre méthode de données () est-elle virtuelle?
@Sebastian n, il est remplacé par QabstractTemmodel.
Aucune méthode de données () n'est remplie de QabstractTemmodel. La signature est correcte (QTCreator Show's IT Italicized signifie qu'il s'agit d'une fonction de remplacement).
Bien, en supposant qu'il n'y a pas de magie, je pense que vous avez échoué dans certaines fonctions. Vérifiez que vous revenez jamais index valide, Nombre de lignes> 0. Aussi, qu'est-ce que cela signifie:
si (parent.column ()> 0) {retour 0; } code>? En outre, vous n'avez pas besoin d'écrire
boolvar == true code>. C'est assez
boolvar code>
Pensez à utiliser MODLETTEST - Très probablement, il révélera beaucoup de bugs cachés. développeur.qt.nokia.com/wiki/model_test