Russian Qt Forum

Qt => Базы данных => Тема начата: Мария от Апрель 15, 2011, 13:06



Название: Взаимодействие пользователя с отображенными результатами запроса
Отправлено: Мария от Апрель 15, 2011, 13:06
Здравствуйте, я новичок в QT. У меня такая проблема,  нужно отобразить на экран результат sql запроса, пользовотель должен выбрать строку, нажать ОК и приложение переходит к следующему окну. Пока только у меня получилось отобразить результат запроса с помощью QSqlQueryModel и QTableView, но что делать дальше не знаю. Нужно :
- чтоб при клике на любое поле строки выделялась вся строка
- как-то отловить выделенную сткоку, вернее значение ее первого поля.


Название: Re: Взаимодействие пользователя с отображе
Отправлено: pokidoff от Апрель 15, 2011, 13:14
Для выделения строками в свойствах QTableView:
selectionMode = SingleSelection;
selectionBehavior = SelectRows;

Для получения первой колонки модели [ID строки, я так понимаю =) ]:
Код:
void MainWindow::on_tableViewClick(QModelIndex index){

    QVariant value = index.model()->index(index.row()/*Номер строки*/ ,0/*Номер колонки*/).data();

}


Название: Re: Взаимодействие пользователя с отображенными результатами запроса
Отправлено: Мария от Апрель 15, 2011, 15:37
Спасибо, с selectionMode = SingleSelection и selectionBehavior = SelectRows все получилось.
По поводу колонки не очень понятно: в процедуру передается QModelIndex, а как его получить, если неизвестно, какую строку пользователь выберет. Т.е. мне нуно как-то получить QModelIndex именно выделенной пользователем строки.



Название: Re: Взаимодействие пользователя с отображе
Отправлено: mutineer от Апрель 15, 2011, 15:41
QTableView испускает сигнал, в котором передает индекс выбранного элемента. подключаешь этот сигнал к слоту и имеешь индекс


Название: Re: Взаимодействие пользователя с отображенными результатами запроса
Отправлено: pokidoff от Апрель 15, 2011, 15:44
Приведенный выше метод - это слот.

Код
C++ (Qt)
connect(ui->tableView, SIGNAL(clicked (QModelIndex )), this, SLOT(on_tableViewClicked(QModelIndex));
 

или в дизайнере пр. кл. по tableView -> перейти к слоту-> clicked(QModelIndex);

Сигнал - это событие, которое таблица посылает при клике по строке. Он несет нужный индекс и ни откуда его брать не надо.


Название: Re: Взаимодействие пользователя с отображенными результатами запроса
Отправлено: Мария от Апрель 15, 2011, 16:21
Спасибо! Получилось! А существует такой сигнал doubleclicked?


Название: Re: Взаимодействие пользователя с отображенными результатами запроса
Отправлено: mutineer от Апрель 15, 2011, 16:23
Спасибо! Получилось! А существует такой сигнал doubleclicked?

Существует и в документации его можно увидеть