Russian Qt Forum
Ноябрь 02, 2024, 11:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableView, QSqlTableModel. Как сделать поиск значения в таблице?  (Прочитано 13304 раз)
Пытон
Гость
« : Сентябрь 15, 2013, 09:54 »

Представление QTableView
У неё модель QSqlTableModel

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

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

В какую сторону хоть смотреть? Делать выборку посредством фильтра или sql-запроса - не подходит! Надо чтобы пользователь набрал куда-нибудь в текстбокс фамилию, нажал на кнопочку и таблица на экране отобразила ту свою часть в которой начинаются строки с такой фамилией.
Записан
VPS
Гость
« Ответ #1 : Сентябрь 15, 2013, 10:32 »

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

P/S: если Вы не сортируете вывод в представлении посредством вызова соответствующего метода класса QTableView, то можно обойтись и без прокси модели.
« Последнее редактирование: Сентябрь 15, 2013, 10:39 от vps » Записан
Пытон
Гость
« Ответ #2 : Сентябрь 15, 2013, 10:44 »

Э-э-э-э...
А сам поиск-то чем делать? Я ничего не сортирую.
Записан
VPS
Гость
« Ответ #3 : Сентябрь 15, 2013, 11:06 »

Если записей в таблице не очень много, то можно сделать итерацию по строкам модели (с поиском нужного значения в заданном столбце) или использовать "QAbstractItemModel::match".
« Последнее редактирование: Сентябрь 15, 2013, 11:09 от vps » Записан
Пытон
Гость
« Ответ #4 : Сентябрь 15, 2013, 11:14 »

Я использую QSqlTableModel. У неё, вроде как, нету никакого match
Записан
Пытон
Гость
« Ответ #5 : Сентябрь 15, 2013, 11:19 »

Что-то совсем ужо не врубаюсь. По какому месту итерацию-то делать? for something in чего?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Сентябрь 15, 2013, 11:23 »

Я использую QSqlTableModel. У неё, вроде как, нету никакого match
Тебе же сказали про метод базового класса.
Записан

Qt 5.11/4.8.7 (X11/Win)
Пытон
Гость
« Ответ #7 : Сентябрь 15, 2013, 11:55 »

Пожалуйста, кто-нибудь приведите пример строки с этим match.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Сентябрь 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;
   }
}
 
Записан

Qt 5.11/4.8.7 (X11/Win)
Пытон
Гость
« Ответ #9 : Сентябрь 15, 2013, 12:30 »

Использую sqlite.
match ищет данные только по той части таблицы, которую  sqltablemodel соизволил к текущему моменту загрузить. Если пользователь не бежал бегунком по вьюшке и не пробежался до самого конца таблицы, то match практически бесполезен...
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #10 : Сентябрь 15, 2013, 13:01 »

Ну дык, коли не нашел в вычитанных данных, подгружай потихоньку через fetchMore() пока canFetchMore() == true и ищи уже в новых.
Записан

Qt 5.11/4.8.7 (X11/Win)
Пытон
Гость
« Ответ #11 : Сентябрь 15, 2013, 13:08 »

Бесконечно тоскую по досово-фокспровскому:
locate for fam = 'Иванов'
if found()
  ? 'Иванов нашёлся! Указатель текущей записи в таблице автоматически переставлен на него!'
EndIf
Записан
Пытон
Гость
« Ответ #12 : Сентябрь 15, 2013, 13:58 »

Сколько ж текста нужно писать в современных языках, дабы получить то, что в допотопных укладывалось в пару коротеньких строчек.

Этот match чёртов.
Документация к PyQt4 сделана неудобно! Хрен поймёшь к какому модулю относится какой-либо параметр для какого-либо метода класса и какие значения он может принимать.
Записан
Bepec
Гость
« Ответ #13 : Сентябрь 15, 2013, 16:09 »

Пишите на php - он даст вам простоту, но не даст скорости и возможностей Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.122 секунд. Запросов: 23.