Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Пытон от Сентябрь 15, 2013, 09:54



Название: QTableView, QSqlTableModel. Как сделать поиск значения в таблице?
Отправлено: Пытон от Сентябрь 15, 2013, 09:54
Представление QTableView
У неё модель QSqlTableModel

Требуется: В QTableView найти и сделать текущей строчку в которой значение столбца fam = "Иванов"

Чтой-то я не нахожу никаких методов типа find, seek, locate и т.д. ни для tableview, ни для sqltablemodel.

В какую сторону хоть смотреть? Делать выборку посредством фильтра или sql-запроса - не подходит! Надо чтобы пользователь набрал куда-нибудь в текстбокс фамилию, нажал на кнопочку и таблица на экране отобразила ту свою часть в которой начинаются строки с такой фамилией.


Название: Re: QTableView, QSqlTableModel. Как сделать поиск значения в таблице?
Отправлено: VPS от Сентябрь 15, 2013, 10:32
Попробуйте использовать QSortFilterProxyModel, как промежуточную. Поиск делать по исходной модели, потом найденный индекс преобразовывать в индекс прокси модели, а уже потом в представлении выделять нужную строку.

P/S: если Вы не сортируете вывод в представлении посредством вызова соответствующего метода класса QTableView, то можно обойтись и без прокси модели.


Название: Re: QTableView, QSqlTableModel. Как сделать поиск значения в таблице?
Отправлено: Пытон от Сентябрь 15, 2013, 10:44
Э-э-э-э...
А сам поиск-то чем делать? Я ничего не сортирую.


Название: Re: QTableView, QSqlTableModel. Как сделать поиск значения в таблице?
Отправлено: VPS от Сентябрь 15, 2013, 11:06
Если записей в таблице не очень много, то можно сделать итерацию по строкам модели (с поиском нужного значения в заданном столбце) или использовать "QAbstractItemModel::match".


Название: Re: QTableView, QSqlTableModel. Как сделать поиск значения в таблице?
Отправлено: Пытон от Сентябрь 15, 2013, 11:14
Я использую QSqlTableModel. У неё, вроде как, нету никакого match


Название: Re: QTableView, QSqlTableModel. Как сделать поиск значения в таблице?
Отправлено: Пытон от Сентябрь 15, 2013, 11:19
Что-то совсем ужо не врубаюсь. По какому месту итерацию-то делать? for something in чего?


Название: Re: QTableView, QSqlTableModel. Как сделать поиск значения в таблице?
Отправлено: GreatSnake от Сентябрь 15, 2013, 11:23
Я использую QSqlTableModel. У неё, вроде как, нету никакого match
Тебе же сказали про метод базового класса.


Название: Re: QTableView, QSqlTableModel. Как сделать поиск значения в таблице?
Отправлено: Пытон от Сентябрь 15, 2013, 11:55
Пожалуйста, кто-нибудь приведите пример строки с этим match.


Название: Re: QTableView, QSqlTableModel. Как сделать поиск значения в таблице?
Отправлено: GreatSnake от Сентябрь 15, 2013, 12:14
Пожалуйста, кто-нибудь приведите пример строки с этим match.
Мде... А в чём там сложность ???
Если уж элементарный match() не осилить, то кто мешает самому найти?
Код
C++ (Qt)
int row_count = model->rowCount();
QString search = "Иванов";
QModelIndex founded_index;
for( int i = 0; i < row_count; i++ )
{
   QModelIndex idx = model->index( i, search_column );
   if( model->data( idx ).toString() == search )
   {
      founded_index = idx;
      break;
   }
}
 


Название: Re: QTableView, QSqlTableModel. Как сделать поиск значения в таблице?
Отправлено: Пытон от Сентябрь 15, 2013, 12:30
Использую sqlite.
match ищет данные только по той части таблицы, которую  sqltablemodel соизволил к текущему моменту загрузить. Если пользователь не бежал бегунком по вьюшке и не пробежался до самого конца таблицы, то match практически бесполезен...


Название: Re: QTableView, QSqlTableModel. Как сделать поиск значения в таблице?
Отправлено: GreatSnake от Сентябрь 15, 2013, 13:01
Ну дык, коли не нашел в вычитанных данных, подгружай потихоньку через fetchMore() (http://doc.crossplatform.ru/qt/4.7.x/qsqlquerymodel.html#fetchMore) пока canFetchMore() == true и ищи уже в новых.


Название: Re: QTableView, QSqlTableModel. Как сделать поиск значения в таблице?
Отправлено: Пытон от Сентябрь 15, 2013, 13:08
Бесконечно тоскую по досово-фокспровскому:
locate for fam = 'Иванов'
if found()
  ? 'Иванов нашёлся! Указатель текущей записи в таблице автоматически переставлен на него!'
EndIf


Название: Re: QTableView, QSqlTableModel. Как сделать поиск значения в таблице?
Отправлено: Пытон от Сентябрь 15, 2013, 13:58
Сколько ж текста нужно писать в современных языках, дабы получить то, что в допотопных укладывалось в пару коротеньких строчек.

Этот match чёртов.
Документация к PyQt4 сделана неудобно! Хрен поймёшь к какому модулю относится какой-либо параметр для какого-либо метода класса и какие значения он может принимать.


Название: Re: QTableView, QSqlTableModel. Как сделать поиск значения в таблице?
Отправлено: Bepec от Сентябрь 15, 2013, 16:09
Пишите на php - он даст вам простоту, но не даст скорости и возможностей :)