Цитата(xls @ 13.4.2011, 16:13)
Похоже, ты не задал модель вьюшке или приведи весь код.
Нет модель с вьюшкой связываю. Ок, щас код кину.
#include "questionsmodel.h"
#include <QDebug>
QuestionsModel::QuestionsModel(QObject *parent) :
QAbstractItemModel(parent)
{
qDebug()<<"konstruktor";
}
Qt::ItemFlags QuestionsModel::flags(const QModelIndex &index) const
{
qDebug()<<"flags()";
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
QVariant QuestionsModel::headerData(int section, Qt::Orientation orientation, int role) const
{
qDebug()<<"headerData()";
if(orientation == Qt::Horizontal && role == Qt::DisplayPropertyRole){
QVariant("Plugins");
}
return QVariant();
}
QVariant QuestionsModel::data(const QModelIndex &index, int role) const
{
qDebug()<<"data";
if(role!=Qt::DisplayRole)
return QVariant();
Node * node = nodeFromIndex(index);
if (!node)
return QVariant();
return QVariant(node->getString());
}
Node * QuestionsModel::nodeFromIndex(const QModelIndex &index) const
{
qDebug()<<" nodeFromIndex";
if(index.isValid())
return static_cast<Node *>(index.internalPointer());
else
return rootNode;
}
QModelIndex QuestionsModel::index(int row, int column, const QModelIndex &parent) const
{
qDebug("rtyjfykkgkhgkgkg");
if (!hasIndex(row, column, parent))
return QModelIndex();
Node * parentNode = nodeFromIndex(parent);
if(parentNode == rootNode)
return QModelIndex();
return createIndex(row,column,parentNode->children[row]);
}
QModelIndex QuestionsModel::parent(const QModelIndex &child) const
{
qDebug()<<"parent";
Node * node = nodeFromIndex(child);
if(!node || node == rootNode)
return QModelIndex();
Node * parentNode = node->parent;
if(!parentNode || node == rootNode)
return QModelIndex();
// Node * grandparentNode = parentNode->parent;
int row = parentNode->children.indexOf(parentNode);
// if(!grandparentNode)
// row = grandparentNode->children.indexOf(parentNode);
// else
// row = FNodeList.indexOf(parentNode);
return createIndex(row,child.column(),parentNode);
}
void QuestionsModel::setPluginList(QList<IPlugin *> plugins)
{
qDebug()<<"setRootNode";
QMap<QString,QList<IPlugin *> > pluginTree;
foreach(IPlugin * plugin,plugins){
QString testString = plugin->getStringDiscipline()+
QString::number(plugin->getNumber());
pluginTree[testString].append(plugin);
}
rootNode = new RootNode();
foreach(QList<IPlugin *> pluginList,pluginTree){
TestNode * testNode = new TestNode();
foreach(IPlugin * testPlugin,pluginList){
PluginNode * pluginNode = new PluginNode(testPlugin);
testNode->children.append(pluginNode);
pluginNode->parent = testNode;
}
rootNode->children.append(testNode);
}
reset();
}
int QuestionsModel::rowCount(const QModelIndex &parent) const
{
qDebug()<<"rowCount";
Node * parentNode = nodeFromIndex(parent);
if (!parentNode)
return 0;
return parentNode->children.count();
}
int QuestionsModel::columnCount(const QModelIndex &parent) const
{
qDebug()<<"columnCount";
qDebug()<<parent;
if(!parent.isValid())
return 0;
return 1;
}
а вот связка тривьюшки с моделью.
QuestionsModel questionsModel;
questionsModel.setPluginList(pluginList);
ui->treeView->setModel(&questionsModel);