Russian Qt Forum

Qt => Базы данных => Тема начата: linuxoid от Август 15, 2007, 08:17



Название: Работа с таблицей и QSqlQueryModel
Отправлено: linuxoid от Август 15, 2007, 08:17
Как определить строку(row) при нажатии мышкой на ячейку в таблице(QTableView) и достать из этой строки значение нужного мне столбца?
Если кто знает напишите плз очень поможете....  Заранее спасибо


Название: Работа с таблицей и QSqlQueryModel
Отправлено: SABROG от Август 15, 2007, 08:30
Код:

tbvMy->currentIndex()->row;


Код:

tbvMyModel->item(tbvMy->currentIndex()->row, номер_колонки)->data(Qt::Роль)->toТип();


Название: Работа с таблицей и QSqlQueryModel
Отправлено: linuxoid от Август 15, 2007, 10:58
чё то неполучается!у меня таблица,которая является отображением трёх разных таблиц:
setQuery("select cities.city_name,  articles.article_name, sales.kol_vo, sales.dat_real,sales.id_key_sal FROM `sales`, `cities`, `articles` WHERE  sales.sit_key = cities.id_key_city AND sales.art_key = id_key_art ORDER BY  sales.dat_real DESC , cities.city_name");

и эту таблицу нужно сделать редактируемой.так вот как сделать так чтобы когда я нажимал на нужную мне ячейку она доставала (для моего примера) значение id_key_sal из выбранной !строки! и затем я это значение использовал в sql запросе???

я пытаюсь сделать так:

bool MyModel::setData(const QModelIndex &index,const QVariant &value,int /* role */) {
   if (index.column() < 0 || index.column() > 3)
      return false;
   
bool ok;
   QSqlQuery query;
   if (index.column() == 0) {
      query.prepare("update sales,cities set city_name =  where id_key_sal=" +;
      query.addBindValue(value.toString());

добавлено спустя 2 минуты:

 а ещё как вставить значение вводимое в ячейке пользователем в sql запрос??


Название: Работа с таблицей и QSqlQueryModel
Отправлено: SABROG от Август 15, 2007, 11:27
Код:

query.prepare("update sales,cities set city_name = where id_key_sal=" + index.data(Qt::UserRole).toString();


При условии, что твой id_key_sal находится именно в Qt::UserRole, иначе другую роль. Вполне возможно что вместо точек где-то надо указатели использовать (->), я прототипы всех функций не помню


Название: Работа с таблицей и QSqlQueryModel
Отправлено: linuxoid от Август 15, 2007, 15:15
UserRole описать в data?и как?можешь какой нить код выложить?можешь аську дать? а как взять значение которое ввёл юзер в ячейки таблицы??


Название: Работа с таблицей и QSqlQueryModel
Отправлено: SABROG от Август 15, 2007, 17:03
Примеров достаточно с исходниками Qt идет, а на Qt Assistant вообще молиться можно.


Название: Работа с таблицей и QSqlQueryModel
Отправлено: linuxoid от Август 16, 2007, 09:51
а есть на русском Assistant


Название: Работа с таблицей и QSqlQueryModel
Отправлено: SABROG от Август 16, 2007, 10:18
Нету, а пока будешь его переводить выйдет новая версия Qt, и перевод устареет.


Название: Работа с таблицей и QSqlQueryModel
Отправлено: linuxoid от Август 16, 2007, 11:03
:lol:

добавлено спустя 4 минуты:

 а подскажи как присвоить переменной значение ячейки на которую произошёл doubleClick таблицы QTableView???я кстати QSqlQueryModel использую.

добавлено спустя 1 минуту:

 tbvMy->currentIndex()->row;

tbvMyModel->item(tbvMy->currentIndex()->row,номер_колонки)->data(Qt::Роль)->toТип();

это код не пашет и вообще как я понял это для модели с определённой dat'ой и setDat'ой


Название: Работа с таблицей и QSqlQueryModel
Отправлено: SABROG от Август 16, 2007, 11:16
Значение ячейки в слоте doubleClicked получить так:

Код:

QString text = index->data().toString();
int id = index->data().toInt(); // в случае если там циферки


Почитай Assistant, а то мне приходится это делать вместо тебя на работе...


Название: Работа с таблицей и QSqlQueryModel
Отправлено: Sergey B. от Август 16, 2007, 12:01
Тебе нужно получить значение, хранящееся в модели!
Значение из модели можно получить по индексу!
Индекс передаётся в сигнале класса отображения (QTableVew, QTreeView, QListView)

т.е. тебе нужно соединить сигнал отображения (в котором летит индекс элемента модели - activated, к примеру) , со своим слотом, в котором ты берёшь этот индекс и  получаешь значения...

Описание сигнала...

Код:
void QAbstractItemView::activated ( const QModelIndex & index )   [signal] 
This signal is emitted when the item specified by index is activated by the user. How to activate items depends on the platform; e.g., by single- or double-clicking the item, or by pressing the Return or Enter key when the item is current.
See also clicked(), doubleClicked(), entered(), and pressed().


Слот скажем
Код:
void MySlot(const QModelIndex & index)


Соедини сигнал со своим слотом:
Код:

connet(tableView, SIGNAL(activated(const QModelIndex & index)), this, SLOT(MySlot(const QModelIndex & index)));

Код:
void MyForm::MySlot(const QModelIndex & index){
//а вот тут тебе и index, с помощью которого берёшь данные
int num=model->data(model->index(index.row(), index.column()).toInt()));
}