crossplatform.ru

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


  Ответ в Нахождение нужного элемента в QListView
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
AD Дата 14.11.2008, 17:28
 
Цитата(Litkevich Yuriy @ 14.11.2008, 17:00) *
AD, что это за слот? как туда попадаешь

Вот так туда попадаю.
connect(lineFindDB, SIGNAL(textEdited(const QString&)), this, SLOT(findLeftSN(const QString&)));



int cool = 100;


Если по-русски сказать, то при изменении текста в эдит поле, куда вводится серийный, который хотят найти.
Litkevich Yuriy Дата 14.11.2008, 17:00
  AD, что это за слот? как туда попадаешь
AD Дата 14.11.2008, 16:53
  На англоязычном форуме подсказали правильное решение. :) Данная штука решается с помощью
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);
}
Litkevich Yuriy Дата 14.11.2008, 16:51
  AD, в указанной теме говорилось об автозавершении, т.е. есть комбобокс, внего вводятся символы, а в выподающем списке показывается наиболееблизкое совпадение.

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

Т.о. тебе указан путь к решению задачи, готового кода скорее всего нет.
AD Дата 14.11.2008, 15:55
  Не очень-то подходит. QComboBox имеет довольно удобные функции, которых нет в QListView! Потом в данном примере не указывается как фокус на нем установить. В QComboBox просто выбирается заданный элемент, ЕСЛИ НА НЕГО НАЖАТЬ!!!
Litkevich Yuriy Дата 14.11.2008, 15:34
  тут
AD Дата 14.11.2008, 15:14
  Блин, я реально не могу найти нужную тему. А мне это очень необходимо!!! :(
AD Дата 14.11.2008, 14:09
 
Цитата(Litkevich Yuriy)
AD, ищи по форуму, про автоподстановку в комбобоксе, недавно было, механизм тотже

Искал по этим словам. Не нашел. Дай, пожалуйста, ссылку! :) Заранее спасибо.
Litkevich Yuriy Дата 14.11.2008, 13:48
  AD, ищи по форуму, про автоподстановку в комбобоксе, недавно было, механизм тотже
AD Дата 14.11.2008, 13:08
  Вроде ведь многие работали с таблицами, с БД, с модель-представление. Неужели никто не сталкивался с подобными задачами? Мне кажется такого рода задачка в первую очередь встанет. По заданному значению параметра найти индекс модели. Помогите, пожалуйста.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 12:50