crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Нахождение нужного элемента в QListView, получение фокуса
AD
  опции профиля:
сообщение 13.11.2008, 17:56
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Вопрос такой: в эдит-поле вводится сериный номер, чуть ниже список серийных номеров, выбранных из БД. Как заставить при введении цифры номера, фокус перемещался на первый найденный элемент. Это общая задача.

Более конкретно: у меня есть имя серийного номера, как зная это имя получить QModelIndex по которому я смогу определить элемент в QListView? Буду благодарен за любую помощь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 14.11.2008, 13:08
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Вроде ведь многие работали с таблицами, с БД, с модель-представление. Неужели никто не сталкивался с подобными задачами? Мне кажется такого рода задачка в первую очередь встанет. По заданному значению параметра найти индекс модели. Помогите, пожалуйста.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.11.2008, 13:48
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


AD, ищи по форуму, про автоподстановку в комбобоксе, недавно было, механизм тотже
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 14.11.2008, 14:09
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(Litkevich Yuriy)
AD, ищи по форуму, про автоподстановку в комбобоксе, недавно было, механизм тотже

Искал по этим словам. Не нашел. Дай, пожалуйста, ссылку! :) Заранее спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 14.11.2008, 15:14
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Блин, я реально не могу найти нужную тему. А мне это очень необходимо!!! :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.11.2008, 15:34
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


тут
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 14.11.2008, 15:55
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Не очень-то подходит. QComboBox имеет довольно удобные функции, которых нет в QListView! Потом в данном примере не указывается как фокус на нем установить. В QComboBox просто выбирается заданный элемент, ЕСЛИ НА НЕГО НАЖАТЬ!!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.11.2008, 16:51
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


AD, в указанной теме говорилось об автозавершении, т.е. есть комбобокс, внего вводятся символы, а в выподающем списке показывается наиболееблизкое совпадение.

у тебя все тоже самое, только поле в вода и список, список в комбобоксе использует концепцию модель/представление, а для авто завершения QCompleter который всю механнику совпадений и связь с Селекшнмодель берет на себя.

Т.о. тебе указан путь к решению задачи, готового кода скорее всего нет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 14.11.2008, 16:53
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


На англоязычном форуме подсказали правильное решение. :) Данная штука решается с помощью
QModelIndexList QAbstractItemModel::match ( const QModelIndex & start, int role, const QVariant & value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags( Qt::MatchStartsWith | Qt::MatchWrap ) ) const [virtual]

Вот описание слота, который решает мою проблему:
/// Поиск в левом списке номера, часть (или он весь) которого отражена в new_SN
void LicenceBuilder::findLeftSN(const QString& new_SN)
{
    if(new_SN.isEmpty()) return;

    QSqlTableModel model;
    model.setTable("DeviceList");
    model.select();
    QStringList listNames, selList;
    for(int i=0; i<model.rowCount(); ++i)
    {
        QSqlRecord record = model.record(i);
        listNames.append(record.value("serialNumber").toString());
    }
    foreach(QString name, listNames)
        if(name.indexOf(new_SN, 0, Qt::CaseInsensitive) != -1)
            selList.append(name);

    QModelIndexList indexList = model.match(model.index(0, 0), Qt::DisplayRole, selList.first());
    QModelIndex selectedIndex(indexList.first());
    listDBNumbers -> setCurrentIndex(selectedIndex);
}


Сообщение отредактировал AD - 14.11.2008, 16:53
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.11.2008, 17:00
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


AD, что это за слот? как туда попадаешь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 15.11.2019, 14:03