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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableView & QHeaderView  (Прочитано 14338 раз)
migel
Гость
« : Апрель 19, 2009, 11:08 »

Добрый день.
Собственно вопрос:
некоторое время назад пересел на Qt и вот с толкнулся с проблемой,
создаю собственную модель QAbstractTableModel соединяю её с QTableView.
Все замечательно, но необходимо что бы в заголовке таблицы было как минимум
две строки в одной из которой были привязанны QComboBox к соответсвующим полям,
а в другой title поля.
Пытался переопредилить класс QHeaderView а в нем виртальную функцию
void paintSection ( QPainter * painter, const QRect & rect, int logicalIndex ) const;
что как то безрезультатно.
http://www.ics.com/files/docs/qicstable/2.4/index.html
вот примерно что мне нухно, в том смысле как долхны выглядет заголовки.
Может кто решал такую задачку.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Апрель 19, 2009, 13:05 »

Глянь вот эту тему http://www.prog.org.ru/topic_9143_0.html
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
migel
Гость
« Ответ #2 : Апрель 19, 2009, 13:35 »

Огромное человеческое спасибо!!!
Записан
Barmaglodd
Гость
« Ответ #3 : Апрель 20, 2009, 06:42 »

В этом случае я бы лучше 2 QTableView использовал: одину для заголовка, вторую для содержимого таблицы. Меньше головной боли с комбобоксами в заголовке.
Записан
migel
Гость
« Ответ #4 : Апрель 23, 2009, 13:10 »

Да действительно оказалось проще использовать две таблицы.
Записан
migel
Гость
« Ответ #5 : Апрель 23, 2009, 13:23 »

А вот еще один вопрос, как можно сделать инкрементальный поиск в QtableView, т.е.
пользователь в эдите вводит символы запроса, а курсор передвигается по мере соответствия к необходимой записи,
причем остальные записи не исчезают
Записан
c00ker
Гость
« Ответ #6 : Апрель 23, 2009, 16:52 »

примерно так:

Код:
       QVariant val = "123"; // строка для поиска
       QModelIndexList list = model->match(model->index(0, 0), 0, val);

       if (!list.isEmpty())
        {
            selectionModel->setCurrentIndex (list.first(),QItemSelectionModel::Rows|
                                             QItemSelectionModel::Select|QItemSelectionModel::ClearAndSelect);
            view->scrollTo(model->index(list.first().row(), default_column));
        }
Записан
migel
Гость
« Ответ #7 : Апрель 27, 2009, 17:48 »

Точно все отлично пашет, слегка доработал код,для того что бы поиск шел только точному значению, и выделения делал не только по первой встретившейся записи а по всем похожим записям.
Спасибо еще раз, всем.
Записан
Blayder
Гость
« Ответ #8 : Июль 17, 2009, 16:46 »

Код
      QVariant val = "123"; // строка для поиска
      QModelIndexList list = model->match(model->index(0, 0), 0, val);
 
      if (!list.isEmpty())
       {
           selectionModel->setCurrentIndex (list.first(),QItemSelectionModel::Rows|
                                            QItemSelectionModel::Select|QItemSelectionModel::ClearAndSelect);
           view->scrollTo(model->index(list.first().row(), default_column));
       }
А не могли бы Вы пояснить немного данный пример? Собственно интересует именно:
 - selectionModel - что за тип и чем является?
 - default_column - если я верно догадываюсь, то это подразумевается наименование столбца, по которому происходит поиск?
Записан
spirit
Гость
« Ответ #9 : Июль 17, 2009, 17:14 »

- selectionModel - что за тип и чем является?
QItemSelectionModel
Записан
Blayder
Гость
« Ответ #10 : Июль 17, 2009, 18:09 »

Что-то я пока не сообразил, коим образом правильно применить приведенный код Грустный
Дурак наверно совсем.. Такое дело:
Код
C++ (Qt)
bool sql_test::findRem()
{
QVariant val = fLine->text();
QModelIndexList list = model->match(model->index(0, 0), 0, val,Qt::MatchContains);
QItemSelectionModel *selectionModel = new QItemSelectionModel;
qDebug() << " val= " << val;
if (!list.isEmpty())
{
qDebug() << "Found some crap";
selectionModel->setCurrentIndex(list.first(),QItemSelectionModel::Rows|
QItemSelectionModel::Select|QItemSelectionModel::ClearAndSelect);
dbView->scrollTo(model->index(list.first().row(),1 ));
return true;
} else {
return false;
}
}

Модэл определено ранее и является
Код
C++ (Qt)
model = new QSqlQueryModel;
которое выполняет запрос к МуСКЛ и выдает необходимые данные в dbView (QTableView);
Возможно я не так понял, чем является model в Вашем примере?
Ибо при введении текста в строку поиска и по нажатию кнопки ничего не происходит и в дэбаг о результате поиска ничего не выводит...

Эдит: Верно грят - "утро вечера мудренее"... Разобрался в чем тут вся соль Улыбающийся Ведь поиск происходит по одному контретному столбику... Просто оказалось над было подправить индэкс под нужный столбик, по которому требуется поиск... Все замечательно с Вашим примером Улыбающийся
П.С. А не подскажите, как уговорить данную схему проводить поиск еще и по строкам? Т.е. дабы находило нужный текст во всей таблице?
« Последнее редактирование: Июль 18, 2009, 14:31 от Blayder » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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