crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Проблема с наследованием QAbstractItemModel, Вызвается только columnCount() а дальше все...
fedak_denis
  опции профиля:
сообщение 13.4.2011, 12:21
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 13.4.2011
Пользователь №: 2597

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет! Проблема в следующем. Наследую QAbstractItemModel. Все необходимые методы переопределил. Ни варнингов ни эрроров никаких нет. Но вьюшка пуста.
В начало каждого метода модели вставил qDebug()<<(имя метода), но в консоли приложения получаю лишь следующее:

konstruktor
setRootNode
columnCount
columnCount
columnCount


ок в columnCount(const QModelIndex &parent) дописал еще ниже qDebug()<<parent, теперь:

konstruktor
setRootNode
columnCount
QModelIndex(-1,-1,0x0,QObject(0x0) )
columnCount
QModelIndex(-1,-1,0x0,QObject(0x0) )
columnCount
QModelIndex(-1,-1,0x0,QObject(0x0) )


Ладно, пусть туда передаются недействительные индексы, но другие методы то почему не вызываются?

дописал проверку на действительность индекса.
int QuestionsModel::columnCount(const QModelIndex &parent) const
{
    qDebug()<<"columnCount";
    qDebug()<<parent;
    if(!parent.isValid())
        return 0;
    return 1;
}


теперь columnCount только 2 раза запускается

konstruktor
setRootNode
columnCount
QModelIndex(-1,-1,0x0,QObject(0x0) )
columnCount
QModelIndex(-1,-1,0x0,QObject(0x0) )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
xls
  опции профиля:
сообщение 13.4.2011, 13:13
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 6.9.2010
Пользователь №: 2013

Спасибо сказали: 7 раз(а)




Репутация:   2  


Похоже, ты не задал модель вьюшке или приведи весь код.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fedak_denis
  опции профиля:
сообщение 13.4.2011, 13:19
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 13.4.2011
Пользователь №: 2597

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(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);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_mutineer_*
сообщение 13.4.2011, 13:26
Сообщение #4





Гости








    


У тебя вью спрашивает сколько колонок надо отобразить, ты ему отвечаешь что 0. Раз колонок нет, то данные отображать не надо. Раз отображать не надо, значит и спрашивать их не надо. Попробуй всегда возвращать 1 из columnCount()

А переданный невалидный индекс в columnCount() и rowCount означает что запрашиваются размеры для корневого элемента. не надо там 0 возвращать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 1.12.2024, 21:24