Russian Qt Forum

Qt => Model-View (MV) => Тема начата: vincent от Декабрь 04, 2009, 12:56



Название: Как узнать значение поля QSqlTableModel зная индекс QTableView
Отправлено: vincent от Декабрь 04, 2009, 12:56
Помогите разобраться, пожалуйста, с ситуацией.
На форме есть объект QTableView, в констукторе формы происходит создание и инициализация объекта QSqlTableModel и модель указывается объекту QTableView - все работает нормально. Сейчас необходимо по двойному щелчку мыши по какой-либо строке таблицы (QTableView), например, вывести в окно отладки значение первого поля этой строки - как это реализовать?
Когда работа идет только с моделью QSqlTableModel - тут все понятно - используется model_name.record(id_record).value(name_value), а как быть в данной ситуации? И попутно еще вопрос - сами данные хранятся только в объекте QSqlTableModel или их можно еще получать и из объекта QTableView?
p/s: если вопрос слишком уж ламерский, не обессудьте :), дайте ссылочку тогда где можно почерпнуть информацию на эту тему.



Название: Re: Как узнать значение поля QSqlTableModel зная индекс QTableView
Отправлено: GNU Dimarik от Декабрь 04, 2009, 14:36
Если я все правильно понял,то когда происходит двойной клик на индексе модели ты хочешь получить доступ к этому индексу.
Ну есть как минимум 2 возможности
1) обработать сигнал void QAbstractItemView::doubleClicked(const QModelIndex & index)
2) Написать подкласс QTableView и переопределить там
virtual void QTableView::mouseDoubleClickEvent ( QMouseEvent * event )
что бы получить кликнутый индекс используй
QModelIndex QAbstractItemView::indexAt(const QPoint& point)


Название: Re: Как узнать значение поля QSqlTableModel зная индекс QTableView
Отправлено: vincent от Декабрь 04, 2009, 14:52
Если я все правильно понял....

Не совсем - индексы у меня уже есть :)

Мне нужно было получить значение конретного поля запроса (столбца таблицы), сейчас сделал так:

Код
C++ (Qt)
void MainWindow::on_tableView_doubleClicked(QModelIndex index)
{
   qDebug() << " value "<< ui->tableView->model()->data(ui->tableView->model()->index(index.row(),0)).toInt();
}
 
получается что значение получаю из QTableView, а думал что нужно получать из QSqlTableModel (немного непривычно просто все организованно в QT :) поэтому и возникают такие вопросы)


Название: Re: Как узнать значение поля QSqlTableModel зная индекс QTableView
Отправлено: MoPDoBoPoT от Декабрь 04, 2009, 16:08
По сути, GNU Dimarik дал тебе правильный ответ, только не разжованный  :)

получается что значение получаю из QTableView, а думал что нужно получать из QSqlTableModel
Так ты и получаешь значения из QSqlTableModel, ведь в модели хранятся данные, а представление лишь отображает их. Просто представление предоставляет интерфейс доступа к ее модели - tableView->model(), которым ты воспользовался. Можешь убедится в этом, заменив tableView->model()->... на sqlModel->...


Название: Re: Как узнать значение поля QSqlTableModel зная индекс QTableView
Отправлено: vincent от Декабрь 04, 2009, 20:28
MoPDoBoPoT

Спасибо за разъяснения.  :)