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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: qtableview поиск айтемов  (Прочитано 5116 раз)
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« : Март 19, 2015, 16:30 »

Здравствуйте делаю поиск файлов
мне нужно чтобы я вводил данные в lineedit они обрабатывались
в слоте
Код:
void MainWindow::poisk(QString qw)

проблема в том что я не знаю как мне выполнить поиск в qtableview который отображает qfilesystemmodel мне нужно как бы найти подтекст в тексте

Код:
ui->tableView->setCurrentIndex(sortmodel->mapFromSource(model1->index(putdlyaotobr+"/"+qw)));

//если я ищу вот так то когда то подсветка работает только тогда,когда я вбиваю полное имя файла .
а мне нужно сделать так чтобы чтобы я начал вводить текст он уже начал его искать

Код
C++ (Qt)
void MainWindow::keyPressEvent(QKeyEvent *event)
{
   if (event->key()==Qt::Key_F & event->modifiers()==Qt::ControlModifier)
   {
       jj=jj+1;
       activazia();  // определяем какое окно активно
       if (jj==1)
       {
           ui->lineEdit->setVisible(true);
           //jj=0;
       }
       if (jj==2)
       {
           ui->lineEdit->setVisible(false);
           jj=0;
       }
       if (tekokno==1)   //если активны левые окна
       {
           putdlyaotobr=ui->textEdit->toPlainText();  // здесь берем путь папки в которой находися
       }
       if (tekokno==2)   //если активны правые окна
       {
           putdlyaotobr=ui->textEdit_2->toPlainText();
       }
       connect(ui->lineEdit,SIGNAL(textChanged(QString)),this,SLOT(poisk(QString))); // сигнал при изменении текста выполняем слот
   }
   else
   {
       QMainWindow::keyPressEvent(event);
   }
 
}
 
//подсвечивание файлов
//QString qw-текст введенный
void MainWindow::poisk(QString qw)
{
   activazia();
   msg.setText(QString::number(ui->tableView->model()->rowCount()));
   msg.exec();
//    ui->tableView->selectionModel()->clearSelection();
//    //выделеть элемент в таблице
//    ui->tableView->setCurrentIndex(sortmodel->mapFromSource(model1->index(putdlyaotobr+"/"+qw)));   //putdlyaotobr+"/"+qw--полный путь файла для отображения
 //  ui->tableView->selectionModel()->select(sortmodel->mapFromSource(model1->index(qw)),QItemSelectionModel::Rows);
 
}
вот пример

так вопрос как мне сделать так чтобы я начал вводить допустим 2 а в tableview уже подсветилась папка начинающаяся с "2"
« Последнее редактирование: Март 19, 2015, 16:31 от koldun90 » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Март 19, 2015, 17:18 »

Можно этим искать: http://qt-project.org/doc/qt-4.8-snapshot/qabstractitemmodel.html#match
Записан

koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #2 : Март 19, 2015, 20:31 »

а можете подробнее написать какие параметры нужно передать в функцию...)
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Март 19, 2015, 20:40 »

а можете подробнее написать какие параметры нужно передать в функцию...)

Пожалуйста:
Код
C++ (Qt)
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]
Записан

koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #4 : Март 19, 2015, 22:18 »

а можете подробнее написать какие параметры нужно передать в функцию...)

Пожалуйста:
Код
C++ (Qt)
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]


я правильно понял
Код:
const QModelIndex & start
--- индекс папки в которой производится поиск?
что я сюда должен вставить если моя qfilesystemmodel обернута qsortfilterproxymodel
индекс от прокси модели или индекс от qfilesystemmodel модели?
int role-- что сюда должен?
const QVariant & value--и сюда??
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Март 19, 2015, 22:58 »

а можете подробнее написать какие параметры нужно передать в функцию...)

Пожалуйста:
Код
C++ (Qt)
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]


я правильно понял
Код:
const QModelIndex & start
--- индекс папки в которой производится поиск?
что я сюда должен вставить если моя qfilesystemmodel обернута qsortfilterproxymodel
индекс от прокси модели или индекс от qfilesystemmodel модели?
int role-- что сюда должен?
const QVariant & value--и сюда??


неа, start -- индекс элемента с которого начинается поиск в рамках qfilesystemmodel это может быть и папка, и файл
этот метод класс QAbstractItemModel и он есть у всех моделей включая qfilesystemmodel и qsortfilterproxymodel, так что, можете выбрать сами в какой будете поиск делать
role это Qt::ItemDataRole, у вас role будет Qt::DisplayRole
value -- то, что ищем в элементах модели, для role равной Qt::FontRole, это будет QFont, у вас это строка QString

Почитайте доку, есть же и русской язычные версии 4.5 или 4.3, не помню точно
Записан

koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #6 : Март 19, 2015, 23:38 »

сделал как вы сказали в итоге выводит
 int hits = 1
QString str;
QModelIndexList gg=model1->match ( model1->index(putdlyaotobr),Qt::DisplayRole,str,hits , Qt::MatchStartsWith | Qt::MatchWrap) ;
выводит 1 индекс почему то распечатываю индекс "/" корневая папка
или нужно QString str--это как бы подстрока для поиска?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #7 : Март 20, 2015, 00:12 »

сделал как вы сказали в итоге выводит
 int hits = 1
QString str;
QModelIndexList gg=model1->match ( model1->index(putdlyaotobr),Qt::DisplayRole,str,hits , Qt::MatchStartsWith | Qt::MatchWrap) ;
выводит 1 индекс почему то распечатываю индекс "/" корневая папка
или нужно QString str--это как бы подстрока для поиска?

str -- то, что вы ищете
это может быть просто текст, а может быть и регулярка, это зависит от Qt::Match* флагов
Записан

koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #8 : Март 20, 2015, 05:41 »

сделал как вы сказали в итоге выводит
 int hits = 1
QString str;
QModelIndexList gg=model1->match ( model1->index(putdlyaotobr),Qt::DisplayRole,str,hits , Qt::MatchStartsWith | Qt::MatchWrap) ;
выводит 1 индекс почему то распечатываю индекс "/" корневая папка
или нужно QString str--это как бы подстрока для поиска?

str -- то, что вы ищете
это может быть просто текст, а может быть и регулярка, это зависит от Qt::Match* флагов

вопросы str должно быть как бы вид я ввожу я хочу найти папку начинающуюся на "a" мне нужно что подать в функцию строку вида "a" или "a*"
и что мне тогда указать последним параметром какой
QT matchflag использовать?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Март 20, 2015, 11:25 »

2ТС
см. QCompleter
Записан

Qt 5.11/4.8.7 (X11/Win)
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #10 : Март 20, 2015, 12:54 »

сделал как вы сказали в итоге выводит
 int hits = 1
QString str;
QModelIndexList gg=model1->match ( model1->index(putdlyaotobr),Qt::DisplayRole,str,hits , Qt::MatchStartsWith | Qt::MatchWrap) ;
выводит 1 индекс почему то распечатываю индекс "/" корневая папка
или нужно QString str--это как бы подстрока для поиска?

str -- то, что вы ищете
это может быть просто текст, а может быть и регулярка, это зависит от Qt::Match* флагов

вопросы str должно быть как бы вид я ввожу я хочу найти папку начинающуюся на "a" мне нужно что подать в функцию строку вида "a" или "a*"
и что мне тогда указать последним параметром какой
QT matchflag использовать?

Кажется это Wildcard называется..
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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