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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidget  (Прочитано 3573 раз)
kadr
Гость
« : Январь 27, 2010, 21:23 »

Привет всем, помогите решить проблему! Есть TableWidget в котором 2 колонки, так же есть обработчик, отлавливающий нажатия клавиши:
Код:
if (event->type() == QEvent::KeyPress)
        {
            QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
            if ((keyEvent->key()==Qt::Key_0) || (keyEvent->key()==Qt::Key_1) || (keyEvent->key()==Qt::Key_2) ||
                (keyEvent->key()==Qt::Key_3) || (keyEvent->key()==Qt::Key_4) || (keyEvent->key()==Qt::Key_5) ||
                (keyEvent->key()==Qt::Key_6) || (keyEvent->key()==Qt::Key_7) || (keyEvent->key()==Qt::Key_8) ||
                (keyEvent->key()==Qt::Key_9))
            {
               ui->table->editItem(ui->table->item(ui->table->currentRow(),1));
               ui->table->item(ui->table->currentRow(),1)->setText(keyEvent->text());

               if (ui->table->item(ui->table->currentRow(),1)->text().toInt() > 0)
               {
                   ui->table->item(ui->table->currentRow(),0)->setFont(QFont("",9,75));
               }
               else
               {
                   ui->table->item(ui->table->currentRow(),0)->setFont(QFont("",9,-1));
               }
            }
        }
 return QMainWindow::eventFilter(obj, event);
}
как понятно из кода, что при нажатии на любую цифру начинается редактирование ячейки второго столбца, так вот собственно проблема заключается в том, что если в первой колонке присутствует название с цифрой впереди, то выделение мгновенно переходит на нее, как бы происходит поиск по колонке, а мне это не нужно, как это выключить!
« Последнее редактирование: Январь 27, 2010, 21:35 от kadr » Записан
MoPDoBoPoT
Гость
« Ответ #1 : Январь 28, 2010, 00:13 »

При использовании фильтра событий, в случае, когда событие обработано и не надо его передавать дальше, надо возвращать true:
Код
C++ (Qt)
if (event->type() == QEvent::KeyPress)
       {
           QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
           if ((keyEvent->key()==Qt::Key_0) || (keyEvent->key()==Qt::Key_1) || (keyEvent->key()==Qt::Key_2) ||
               (keyEvent->key()==Qt::Key_3) || (keyEvent->key()==Qt::Key_4) || (keyEvent->key()==Qt::Key_5) ||
               (keyEvent->key()==Qt::Key_6) || (keyEvent->key()==Qt::Key_7) || (keyEvent->key()==Qt::Key_8) ||
               (keyEvent->key()==Qt::Key_9))
           {
              ui->table->editItem(ui->table->item(ui->table->currentRow(),1));
              ui->table->item(ui->table->currentRow(),1)->setText(keyEvent->text());
 
              if (ui->table->item(ui->table->currentRow(),1)->text().toInt() > 0)
              {
                  ui->table->item(ui->table->currentRow(),0)->setFont(QFont("",9,75));
              }
              else
              {
                  ui->table->item(ui->table->currentRow(),0)->setFont(QFont("",9,-1));
              }
 
              return true;   //<=
           }
       }
return QMainWindow::eventFilter(obj, event);
}
Записан
kadr
Гость
« Ответ #2 : Январь 28, 2010, 09:18 »

Вроде помогло. Есть вот еще один вопрос, как можно запретить ввод любых символов, кроме цифр!
Код:
if (event->type() == QEvent::KeyPress) //смотрим что за кнопка была нажата
{
    QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
     if ((keyEvent->key()==Qt::Key_0) || (keyEvent->key()==Qt::Key_1) || (keyEvent->key()==Qt::Key_2) ||
        (keyEvent->key()==Qt::Key_3) || (keyEvent->key()==Qt::Key_4) || (keyEvent->key()==Qt::Key_5) ||
        (keyEvent->key()==Qt::Key_6) || (keyEvent->key()==Qt::Key_7) || (keyEvent->key()==Qt::Key_8) ||
        (keyEvent->key()==Qt::Key_9))//проверяем, если эта одна из цифр
     {
          ui->table->editItem(ui->table->item(ui->table->currentRow(),2));//начинаем редактирование ячейки - количество, текущей строки
          if (keyEvent->text().toInt() >= 0 && keyEvent->text().toInt() <= 9 /*|| keyEvent->text().toInt() == 2
              || keyEvent->text().toInt() == 3 || keyEvent->text().toInt() == 4 || keyEvent->text().toInt() == 5 || keyEvent->text       ().toInt() == 6
              || keyEvent->text().toInt() == 7 || keyEvent->text().toInt() == 8 || keyEvent->text().toInt() == 9 */)
          {
               ui->table->item(ui->table->currentRow(),2)->setText(keyEvent->text());//то в ячейку количество, текущей строки, втавляем символ, который был нажат, то есть число
          }
          else
          {
                return true;
          }
               keyEvent->text().clear();
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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