Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает модель QAbstractTableModel, присвоение QTableView ничего не дает 
:(
    Опции темы
NumLock
Дата 18.1.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.7.2006
Где: Иркутск

Репутация: нет
Всего: нет



Что не так с моей моделью? Необходимо хранить таблицу в две колонки (координаты). Привожу код;

Код
class AutoPathModel : public QAbstractTableModel
{

    Q_OBJECT

    QVector<QPoint> pathData;

public:
    AutoPathModel();
    QVariant data(const QModelIndex &index, int role) const;
    int rowCount(const QModelIndex &parent = QModelIndex()) const;
    int columnCount(const QModelIndex &parent) const;
    Qt::ItemFlags flags(const QModelIndex &parent) const;
    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
    QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;

    void addPoint(int x, int y);
    void addPoint(QPoint point);

};


Код
AutoPathModel::AutoPathModel()
{

}

QVariant
AutoPathModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid())
        return QVariant();

    if (!between(0, pathData.count(), index.row()))
        return QVariant();

    if (!between(0, 1, index.column()))
        return QVariant();

    if (index.column() == 0)
        return QVariant(pathData[index.row()].x());
    return QVariant(pathData[index.row()].y());
}

int
AutoPathModel::rowCount(const QModelIndex &parent) const
{
    if (!parent.isValid())
        return 0;

    return pathData.count();
}

int
AutoPathModel::columnCount(const QModelIndex &parent) const
{
    if (!parent.isValid())
        return 0;

    return 2;
}

Qt::ItemFlags
AutoPathModel::flags(const QModelIndex &parent) const
{
    if (!parent.isValid())
        return 0;

    return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}

QVariant
AutoPathModel::headerData(int section, Qt::Orientation orientation, int role) const
{
    if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
        if (section == 0)
            return QVariant("Longitude");
        else
            return QVariant("Latitude");
    }

    return QVariant();
}

QModelIndex
AutoPathModel::index(int row, int column, const QModelIndex &parent) const
{
    if (!hasIndex(row, column, parent))
        return QModelIndex();

    return createIndex(row, column);
}

void
AutoPathModel::addPoint(int x, int y)
{
    addPoint(QPoint(x, y));
}

void
AutoPathModel::addPoint(QPoint point)
{
    pathData.append(point);
}


При присвоении этой заполненой модели QTableView ничего не происходит.

Это сообщение отредактировал(а) NumLock - 18.1.2009, 15:18
PM MAIL ICQ Skype Jabber   Вверх
pan2004
Дата 18.1.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 6
Всего: 9



что за
Код

!between(0, pathData.count(), index.row())
?
Потом
Цитата

Tip: When implementing a table based model, columnCount() should return 0 when the parent is valid.
...
Tip: When implementing a table based model, rowCount() should return 0 when the parent is valid.

а у тебя получается наоборот


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
NumLock
Дата 18.1.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 30.7.2006
Где: Иркутск

Репутация: нет
Всего: нет



between - это вспомогательная функция. Спасибо, помогло. Логика не сразу прозрачна.
PM MAIL ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0424 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.