Название: Завершение редактирования текста в ячейке! Отправлено: kadr от Декабрь 10, 2009, 11:54 Привет всем, скажите, вот есть форма, на ней есть таблица(QTableWidget), при нажатии на пробел выделяется определенная ячейка текущей строки, в ней меняем текст и потом по нажатии на Enter должно происходить сравнение предыдущего числа с текущим. Так вот проблема в том, что после нажатия на Enter он берет старое число, такое ощущение, что изменения еще не вступили в силу!
Кусок кода: if (keyEvent->key()==Qt::Key_Space) { st_kol = m_ui->pole->item(m_ui->pole->currentRow(),2)->text().trimmed(); m_ui->pole->editItem(m_ui->pole->item(m_ui->pole->currentRow(),2)); } if ((keyEvent->key()==Qt::Key_Return) || (keyEvent->key()==Qt::Key_Enter)) { st_aft = m_ui->pole->item(m_ui->pole->currentRow(),2)->text().trimmed(); if (st_aft != st_kol) { qDebug() <<tr("Есть изменения"); qDebug() <<st_kol; qDebug() <<st_aft; } else { qDebug() <<tr("Нет изменений"); qDebug() <<st_kol; qDebug() <<st_aft; } } Название: Re: Завершение редактирования текста в ячейке! Отправлено: Пантер от Декабрь 10, 2009, 12:33 Данные еще не успели попасть в таблицу.
Название: Re: Завершение редактирования текста в ячейке! Отправлено: kadr от Декабрь 10, 2009, 12:36 Данные еще не успели попасть в таблицу. Я это понимаю, так вот как можно сделать что бы они попали туда!Название: Re: Завершение редактирования текста в ячейке! Отправлено: Пантер от Декабрь 10, 2009, 12:39 Цитировать void QTableWidget::itemChanged ( QTableWidgetItem * item ) [signal] This signal is emitted whenever the data of item has changed. Название: Re: Завершение редактирования текста в ячейке! Отправлено: kadr от Декабрь 10, 2009, 12:42 Цитировать void QTableWidget::itemChanged ( QTableWidgetItem * item ) [signal] This signal is emitted whenever the data of item has changed. Название: Re: Завершение редактирования текста в ячейке! Отправлено: kadr от Декабрь 10, 2009, 14:10 Попробовал я так сделать, объявил глобальную переменную, засунул ее внутрь этой функции, получается что при изменении текста в ячейке в переменную заноситься 1.Ничего не понятно!
void look_zakaz::on_pole_itemChanged(QTableWidgetItem* item) { st_aft.clear(); st_aft = item->text().trimmed(); } Название: Re: Завершение редактирования текста в ячейке! Отправлено: kadr от Декабрь 10, 2009, 14:31 Касяк в том, что после нажатия на enter, сначала происходит:
if ((keyEvent->key()==Qt::Key_Return) || (keyEvent->key()==Qt::Key_Enter)) { if (st_aft != st_kol) { qDebug() <<tr("Есть изменения") << st_aft; st_aft.clear(); } else { qDebug() <<tr("Нет изменений") << st_aft; st_aft.clear(); } //m_ui->pole->editItem(m_ui->pole->item(m_ui->pole->currentRow(),2)); } а потом: void look_zakaz::on_pole_itemChanged(QTableWidgetItem* item) { st_aft.clear(); st_aft = item->text().trimmed(); qDebug() << st_aft; } а надо что бы данные были получены раньше. Название: Re: Завершение редактирования текста в ячейке! Отправлено: Danila_Bagrofff от Декабрь 10, 2009, 15:59 а как на счет использования модели данных? Там разве нельзя посмотреть текущее значение данных?
Название: Re: Завершение редактирования текста в ячейке! Отправлено: kadr от Декабрь 10, 2009, 17:44 а как на счет использования модели данных? Там разве нельзя посмотреть текущее значение данных? Спасибо за советы, я уже решил проблему! :)Название: Re: Завершение редактирования текста в ячейке! Отправлено: Danila_Bagrofff от Декабрь 11, 2009, 09:00 To kadr:
так написал бы, как ты решил проблему =) Вдруг у кого-то еще может возникнуть похожая проблема =) Ответу стоит писать =) Это ж форум для всех =) Название: Re: Завершение редактирования текста в ячейке! Отправлено: kadr от Декабрь 11, 2009, 09:33 To kadr: Проблему решил просто, при начале редактирования, то есть в моем случае, при нажатии на пробел, в глобальную переменную заносятся номера строки и колонки изменяемой ячейки. так написал бы, как ты решил проблему =) Вдруг у кого-то еще может возникнуть похожая проблема =) Ответу стоит писать =) Это ж форум для всех =) if (keyEvent->key()==Qt::Key_Space) { row_cur = 0; column = 0; st_kol = m_ui->pole->item(m_ui->pole->currentRow(),2)->text().trimmed(); m_ui->pole->editItem(m_ui->pole->item(m_ui->pole->currentRow(),2)); row_cur = m_ui->pole->currentRow(); column = m_ui->pole->currentColumn(); } Далее в void look_zakaz::on_pole_itemChanged(QTableWidgetItem* item) сравниваю данные в этих переменных с текущими данными. QString SQL; QSqlQuery q; st_aft.clear(); st_aft = item->text().trimmed(); if ((m_ui->pole->currentRow() == row_cur) && (m_ui->pole->currentColumn() == column) && (st_kol != st_aft)) { SQL = QString("UPDATE zakaz SET kolvo = %1 WHERE name = '%2' AND zavod = '%3' AND srokdo = '%4' AND postavcik = '%5' AND ok = %6") .arg(st_aft.toInt()) .arg(m_ui->pole->item(m_ui->pole->currentRow(),0)->text().trimmed()) .arg(m_ui->pole->item(m_ui->pole->currentRow(),1)->text().trimmed()) .arg(m_ui->pole->item(m_ui->pole->currentRow(),3)->text().trimmed()) .arg(m_ui->pole->item(m_ui->pole->currentRow(),5)->text().trimmed()) .arg(m_ui->pole->item(m_ui->pole->currentRow(),7)->text().toInt()); q.exec(SQL); st_aft.clear(); } else { return; } Вот и все! |