2016-05-11 4 views
0

Я создал QTableView, как показано ниже, и хочу выбрать верхний элемент в качестве выбора по умолчанию.Как выбрать верхний элемент QTableView

proxyModel = new QSortFilterProxyModel(this); 
    proxyModel->setSourceModel(d->model); 

    d->ui->projects->setModel(proxyModel); 
    d->ui->projects->setSortingEnabled(true); 
    proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive); 
    proxyModel->setFilterKeyColumn(-1); 

    connect(d->ui->projects->model(),SIGNAL(dataChanged(QModelIndex,QModelIndex)),d,SLOT(selectTopOne())); 
connect (d->ui->search_phrase, SIGNAL(textChanged(QString)), 
       proxyModel, SLOT(setFilterWildcard(QString))); 

Обратите внимание, что d-> ui-> Проекты представляет свою QTableView. и d-> ui-> projects - это текстовое редактирование для захвата строки поиска.

Я попытался выбрать верхний элемент моего представления таблицы, вызвав слот selectTopOne через signalChanged signala. Но это не призыв к слоту.

И я попытался выбрать строку с Qmodelindex (0,0). Но это тоже не сработало.

EDIT:

Это как мой QTableView появляется в настоящее время.

enter image description here

Это то, что мне нужно сделать. Мне нужно выбрать первую строку автоматически.

enter image description here

Согласно Редактирование текста на вершине пунктов QTableView отфильтрованы. Я хочу также выбрать верхний элемент в то время.

enter image description here

+0

Вы уверены, что ваш "selectTopOne()" называется? – Apin

+0

Это SLOT и подключен к dataChanged SIGNAL модели. Я отлаживаю код. Но точка останова внутри selectTopOne() не попала. –

+0

Так что проблема в том, что ваш selectTopOne не уволен. Что такое тип d-> ui-> projects (вы сказали текстовое поле, но я не понимаю, что такое текстовое поле)? – Apin

ответ

0

Почему вы используете сигнал dataChange() для выбора набора параметров по умолчанию? Правильно ли, что вы хотите выбрать верхний элемент по умолчанию для запуска программы? Вы можете просто использовать модель выбора, например:

d->ui->projects->selectionModel()->select(d->ui->projects->model()->index(0,0), QItemSelectionModel::Select); 

ПОСЛЕ ВАШЕЙ EDIT:

ОК, я получил его. Решение (например) является наследованием от класса QSortFilterProxyModel. Там вы можете использовать некоторую SLOT, которая будет использовать setFilterRexExp() (или, возможно, что-то еще), когда вы измените текст в QLineEdit. После этого отправьте некоторый СИГНАЛ с этого SLOT, который вы можете поймать из своего основного класса и метода вызова, который я написал в верхнем, который выбирает первый элемент. Или, если вы не используете данные индекса модели, выполните:

d->ui->projects->setCurrentIndex(d->ui->projects->model()->index(0,0)); 
+0

Becoz Я хочу выбрать самый верхний элемент в момент фильтрации проектов в соответствии с введенным пользователем. –

1

Надеюсь, этот ответ вам поможет.

ui.tableView->selectRow(0); 
ui.tableView->setFocus(); 
Смежные вопросы