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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с таблицей и QSqlQueryModel  (Прочитано 11191 раз)
linuxoid
Гость
« : Август 15, 2007, 08:17 »

Как определить строку(row) при нажатии мышкой на ячейку в таблице(QTableView) и достать из этой строки значение нужного мне столбца?
Если кто знает напишите плз очень поможете....  Заранее спасибо
Записан
SABROG
Гость
« Ответ #1 : Август 15, 2007, 08:30 »

Код:

tbvMy->currentIndex()->row;


Код:

tbvMyModel->item(tbvMy->currentIndex()->row, номер_колонки)->data(Qt::Роль)->toТип();
Записан
linuxoid
Гость
« Ответ #2 : Август 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 запрос??
Записан
SABROG
Гость
« Ответ #3 : Август 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, иначе другую роль. Вполне возможно что вместо точек где-то надо указатели использовать (->), я прототипы всех функций не помню
Записан
linuxoid
Гость
« Ответ #4 : Август 15, 2007, 15:15 »

UserRole описать в data?и как?можешь какой нить код выложить?можешь аську дать? а как взять значение которое ввёл юзер в ячейки таблицы??
Записан
SABROG
Гость
« Ответ #5 : Август 15, 2007, 17:03 »

Примеров достаточно с исходниками Qt идет, а на Qt Assistant вообще молиться можно.
Записан
linuxoid
Гость
« Ответ #6 : Август 16, 2007, 09:51 »

а есть на русском Assistant
Записан
SABROG
Гость
« Ответ #7 : Август 16, 2007, 10:18 »

Нету, а пока будешь его переводить выйдет новая версия Qt, и перевод устареет.
Записан
linuxoid
Гость
« Ответ #8 : Август 16, 2007, 11:03 »

:lol:

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

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

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

 tbvMy->currentIndex()->row;

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

это код не пашет и вообще как я понял это для модели с определённой dat'ой и setDat'ой
Записан
SABROG
Гость
« Ответ #9 : Август 16, 2007, 11:16 »

Значение ячейки в слоте doubleClicked получить так:

Код:

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


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

Сообщений: 544



Просмотр профиля WWW
« Ответ #10 : Август 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()));
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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