Russian Qt Forum

Qt => Model-View (MV) => Тема начата: admsasha от Сентябрь 30, 2009, 11:03



Название: поиск по QTableView
Отправлено: admsasha от Сентябрь 30, 2009, 11:03

делаю так

Код:
    table = new QTableView();
    model = new QSqlQueryModel;
    table->setModel(model);

void frmFind::find(QString text) {
    QString tmp;

    QRegExp rx("^"+text+"");


    for (int i=0;i<table->model()->rowCount();i++){
        tmp = table->model()->data(table->model()->index(i,0)).toString();
        if (rx.exactMatch(tmp)){
            table->scrollTo(table->model()->index(i+10,0));
            table->setCurrentIndex(table->model()->index(i,0));
            return ;
        }
    }

    return ;
}

Но в базе ~5000 записей, и поиск осуществляется достаточно долго. Какой еще есть способ ?




Название: Re: поиск по QTableView
Отправлено: Пантер от Сентябрь 30, 2009, 18:36
Данные отфильтрованы? Если да, то есть много алгоритмов поиска.


Название: Re: поиск по QTableView
Отправлено: admsasha от Октябрь 01, 2009, 02:15
Данные отфильтрованы? Если да, то есть много алгоритмов поиска.
sqlQuery="SELECT p1,p2,p3 from table1"
model->setQuery(sqlQuery,QSqlDatabase::database());
table->setModel(model);



Название: Re: поиск по QTableView
Отправлено: admsasha от Октябрь 01, 2009, 05:50
Код:
    QString text="mytext";
    QModelIndexList match;
    QModelIndex firstMatch;
    match = table->model()->match(table->model()->index(0,0),Qt::DisplayRole, text);
    firstMatch=match.value(0);
    if (firstMatch.isValid()) {
        return firstMatch;
    }
Вот как сделал, работает во много раз быстрее.