crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Как создать модель для QTableView?
RazrFalcon
  опции профиля:
сообщение 27.4.2011, 17:48
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


С QTableView никогда не работал.

При работе с SQL все просто:
model = new QSqlTableModel(this);
model->setTable("tags");
model->select();
tableView->setModel(model);

А как самому создать таблицу? Без использования SQL?
К примеру 5х100.
Пробовал QStandardItemModel - вышло. Но пишут что лучше использовать QAbstractItemModel - выше скорость. А как им пользоваться вообще не пойму.
Можно пример заполнения QTableView, к примеру, единицами, и размером 5х10.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 27.4.2011, 17:58
Сообщение #2


Активный участник
***

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

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




Репутация:   6  


Таблица нужна для размещения данных из БД? Тогда QSqlQueryModel & QtableView. Можно воспользоваться и QTableWidget. Могу выложить примеры использования и того и другого.

UPD: понял :) под рукой пример использования QAbstractItemModel из книги, но он очень запутанный, там безполлитры не разберешься :(

Сообщение отредактировал silver47 - 27.4.2011, 18:08
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 27.4.2011, 18:24
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Я об этом же.
Из БД заполнить таблицу - просто.
А мне нужен аналог QTableWidget. Но так, как он, теоретически, более медленный - хочется через QTableView + QAbstractItemModel сделать.
Примеров кучу пересмотрел, но что то вообще не пойму.

Таблица будет от 500 строк и до 10000 и больше.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 27.4.2011, 18:31
Сообщение #4


Активный участник
***

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

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




Репутация:   6  


Он не теоретически, он реально более медленный.... Читал по книге там разбирается одно приложение на примере QStandertItemModel, а потом оно же переписывается под QAbstractItemModel. Разобрал как QStandartItemModel работает, а вот до QAbstractItemModel не дошел, времени не хватило :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 27.4.2011, 18:48
Сообщение #5


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Ясно. Ну значит в правильном направлении иду. Так как 1000 сток грузится 30сек, а это долго.

Ждемс советы опытных Qt-ков. :lol:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
qwerty
  опции профиля:
сообщение 27.4.2011, 20:48
Сообщение #6


Новичок


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

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




Репутация:   0  


у меня вопрос почти из той же оперы

унаследовал класс

class mySQLTable: public QSqlTableModel
{
public:
    mySQLTable(QObject *parent = 0):QSqlTableModel(parent){;};
    void setQuery(const QSqlQuery &query){QSqlTableModel::setQuery(query);};
    void setQuery(const QString &query){QSqlTableModel::setQuery(query);};
    bool updateRowInTable(int row, const QSqlRecord &values){return QSqlTableModel::updateRowInTable(row,values);};
};


в коде делаю
m_model = new mySQLTable(this);
m_model->setQuery("запрос SELECT......" );

но из-за кое каких нюансов с бд

нужно некоторые значение ячеек изменить и вывести их во вьюху не делая ни каких изменений в бд
делаю так

for (int i = 0; i < m_model->rowCount();i++)
{

QSqlRecord record;
record = m_model->record(i);
record.setValue(1,QVariant((i)));
bool f = m_model->updateRowInTable(i,record);  //всегда фолс
......................
                 QSqlRecord record;
                 record = m_model->record(i);
                 record.setValue(1,QVariant((i)));
                m_model->setRecord(i, *record);
......................
QModelIndex index = m_model->index(i, j, QModelIndex());
m_model->setData(index, QVariant((i)));
......................
QModelIndex index = tableDialog.tableView->model()->index(i,j);
            if(!index.isValid()) continue;
            tableDialog.tableView->model()->setData(index, "date");

    }
m_model->submitAll();
tableDialog.tableView->setModel(m_model);


и не один из этих вариантов не работает так как мне хочется
при всех этих вызывах измененной вижу только самую последнюю строку во вьюхе
а другие остаются без изменений

куда копать? в чем может быть проблема?

з.ы. Qt version 4.7.1
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 1.5.2011, 8:15
Сообщение #7


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Итак, все что получилось, так это переписать пример simpleModel под себя.

Вопрос вот в чем: мне что, надо все функции самому написать? Заполнения, очистки и тд.
Неужели нет способа по проще?

Неужели ни кто не делал подобного, и не может поделится исходником? Я уже неделю долблю эту таблицу, а результат это таблица с двумя столбцами и все.

Сообщение отредактировал RazrFalcon - 1.5.2011, 8:16
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 3.5.2011, 8:58
Сообщение #8


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

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




Репутация:   12  


Цитата(RazrFalcon @ 1.5.2011, 9:15) *
Итак, все что получилось, так это переписать пример simpleModel под себя.

Вопрос вот в чем: мне что, надо все функции самому написать? Заполнения, очистки и тд.
Неужели нет способа по проще?

Неужели ни кто не делал подобного, и не может поделится исходником? Я уже неделю долблю эту таблицу, а результат это таблица с двумя столбцами и все.


1. Да, большинство виртуальных функций приходится реализовывать самому для конкретной модели данных.

2. Любая модель данных (оптимизированная), априори допускает некоторые вещи: например, частые вставки в модель, или наоборот редкие вставки и частые обращения к процедурам поиска, соответственно подобные вещи отражаются в модели хранения - жертвуют, например, памятью в угоду скорости поиска, универсальных средств думаю не найти, иначе стандартная модель от тролей была бы применима практически всегда. Необязательно, например, что все элементы должны храниться в оперативной памяти и тп, оч много тонкостей, которые необходимо учитывать для получения оптимальной, с точки зрения твоей задачи, модели данных.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 3.5.2011, 15:21
Сообщение #9


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Вот оно что, тогда понятно.
Пока пересел на QStandardItemModel, пока что хватает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 3.5.2011, 15:25
Сообщение #10


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

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




Репутация:   12  


Для небольшого количества элементов обычно достаточно стандартной реализации.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 24.4.2024, 11:27