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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Завершение редактирования текста в ячейке!  (Прочитано 5750 раз)
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;
                }
           }
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Декабрь 10, 2009, 12:33 »

Данные еще не успели попасть в таблицу.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kadr
Гость
« Ответ #2 : Декабрь 10, 2009, 12:36 »

Данные еще не успели попасть в таблицу.
Я это понимаю, так вот как можно сделать что бы они попали туда!
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Декабрь 10, 2009, 12:39 »

Цитировать
void QTableWidget::itemChanged ( QTableWidgetItem * item )   [signal]
This signal is emitted whenever the data of item has changed.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kadr
Гость
« Ответ #4 : Декабрь 10, 2009, 12:42 »

Цитировать
void QTableWidget::itemChanged ( QTableWidgetItem * item )   [signal]
This signal is emitted whenever the data of item has changed.
Предлагаете внутри этой функции заносить новые данные в глобальную переменную и при нажатии на Enter сравнивать их?
Записан
kadr
Гость
« Ответ #5 : Декабрь 10, 2009, 14:10 »

Попробовал я так сделать, объявил глобальную переменную, засунул ее внутрь этой функции, получается что при изменении текста в ячейке в переменную заноситься 1.Ничего не понятно!
void look_zakaz::on_pole_itemChanged(QTableWidgetItem* item)
{
    st_aft.clear();
    st_aft = item->text().trimmed();
}
« Последнее редактирование: Декабрь 10, 2009, 14:18 от kadr » Записан
kadr
Гость
« Ответ #6 : Декабрь 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;
}
а надо что бы данные были получены раньше.
Записан
Danila_Bagrofff
Гость
« Ответ #7 : Декабрь 10, 2009, 15:59 »

а как на счет использования модели данных? Там разве нельзя посмотреть текущее значение данных?
Записан
kadr
Гость
« Ответ #8 : Декабрь 10, 2009, 17:44 »

а как на счет использования модели данных? Там разве нельзя посмотреть текущее значение данных?
Спасибо за советы, я уже решил проблему!  Улыбающийся
Записан
Danila_Bagrofff
Гость
« Ответ #9 : Декабрь 11, 2009, 09:00 »

To kadr:
так написал бы, как ты решил проблему =)

Вдруг у кого-то еще может возникнуть похожая проблема =)

Ответу стоит писать =) Это ж форум для всех =)
Записан
kadr
Гость
« Ответ #10 : Декабрь 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;
    }
Вот и все!   
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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