Мне нужно искать строки через QTableWidget
. Каждая из строк в таблице содержит поле с датой, и мне нужно показать только строки, которые находятся в пределах указанного интервала дат, основанного на пользовательском вводе. Вот моя функция:Быстрый поиск по строкам QTableWidget
void nvr::sort()
{
QTableWidget* tabela = this->findChild<QTableWidget*>("NCtable");
QDateEdit* c1 = this->findChild<QDateEdit*>("c1");
QDateEdit* c2 = this->findChild<QDateEdit*>("c2");
// user specified ranges for date
QDate date1 = c1->date();
QDate date2 = c2->date();
//row numbers in table
int rowsNum = tabela->rowCount();
// hide all rows
for(int z = 0; z < rowsNum; z++) {
tabela->hideRow(z);
}
// show only rows that are within range
for(int z = 0; z < rowsNum; z++) {
QDateTime dateTime = QDateTime::fromString(tabela->item(z,2)->text(),"dd.MM.yyyy hh:mm");
QDate date = dateTime.date();
//date compares
if ((date1.operator <=(date)) && (date2.operator >=(date))) {
tabela->showRow(z);
}
}
}
Это работает отлично, если у меня есть 200 строк. Но когда у меня есть 30 000 строк, и я уверен, что gui зависает, потому что я полагаю, что функция выполняется очень медленно. Любые предложения для более быстрого выполнения?
А как насчет хранения ваших данных в QVector (например, отсортированного по дате 1?), Зацикливайтесь на этом, когда пользователь вводит даты, добавляйте их в QStandardItemModel и показываете их с помощью QTableView. Если пользователь изменяет эти даты, вы просто очистите QStandardItemModel и перезапустите процесс. Это должно работать легко для 30 000 рядов. –