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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отловить нажатие Enter  (Прочитано 5697 раз)
kadr
Гость
« : Декабрь 25, 2009, 15:30 »

Привет, скажите пожалуйста, как отловить нажатие клавиши, любой, в динамически создаваемой форме!
QTableWidget *table = new QTableWidget();
QEvent *event;
   if (event->type() == QEvent::KeyPress)
   {
      QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
      if (keyEvent->key() == Qt::Key_Return)
          {
            on_clicked(table->currentItem());
            connect(table, SIGNAL(itemDoubleClicked(QTableWidgetItem *)), table, SLOT(close()));
          }
   }
не работает!
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


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

Тут нужно через installEventFilter.
Не забывай, что есть еще Qt::Key_Enter.
Но что-то мне кажется, что это все не нужно. Опиши чего ты хочешь добиться.
Записан

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

Вот функция в котором создается динамически окно QTableWidget:
Код
C++ (Qt)
void lgot_rech::on_lpu_button_clicked()
{
   QString str,str_all;
   QStringList st;
   int row = 0;
   QFile file("d:\\BioMedPrice.sst");
   if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
   {
       qDebug() <<"File is not open";
   }
   QFont hor_header_font("Times",12,75,false),item_font ("Times",10,50,false);
   QTableWidget *table = new QTableWidget;
   table->setFixedSize(600,700);
   table->setColumnCount(4);
   table->setHorizontalHeaderItem(0, new QTableWidgetItem("Наименование"));
   table->setHorizontalHeaderItem(1, new QTableWidgetItem("СрокДо"));
   table->setHorizontalHeaderItem(2, new QTableWidgetItem("Цена"));
   table->setHorizontalHeaderItem(3, new QTableWidgetItem("Кол-во"));
   table->verticalHeader()->setVisible(false);
   table->setEditTriggers(false);
   table->setSelectionMode(QAbstractItemView::SingleSelection);
   table->setSelectionBehavior(QAbstractItemView::SelectRows);
   table->horizontalHeaderItem(0)->setFont(hor_header_font);
   table->horizontalHeaderItem(1)->setFont(hor_header_font);
   table->horizontalHeaderItem(2)->setFont(hor_header_font);
   table->horizontalHeaderItem(3)->setFont(hor_header_font);
   table->setFont(item_font);
   table->setWordWrap(true);
   table->setColumnWidth(0,340);
   table->setColumnWidth(1,90);
   table->setColumnWidth(2,80);
   table->setColumnWidth(3,70);
   table->show();
   table->installEventFilter(table);
   table->setWindowTitle(tr("Справочник ЛПУ"));
 
   while (!file.atEnd())
   {
       str = file.readLine().trimmed();
       st = str.split(";");
       table->insertRow(row);
       table->setItem(row,0, new QTableWidgetItem(st.value(1)));
       table->setItem(row,1, new QTableWidgetItem("-"));
       table->setItem(row,2, new QTableWidgetItem(st.value(5)));
       table->setItem(row,3, new QTableWidgetItem(st.value(4)));
       row++;
   }
   file.close();
   connect(table, SIGNAL(itemDoubleClicked(QTableWidgetItem *)), this, SLOT(on_clicked(QTableWidgetItem *)));    
   connect(table, SIGNAL(itemDoubleClicked(QTableWidgetItem *)), table, SLOT(close()));
 
В него, пока из файла, потом из базы, загружаются данные, как видно из кода идет передача данных в другую функцию on_clicked(QTableWidgetItem *) :
Код
C++ (Qt)
void lgot_rech::on_clicked(QTableWidgetItem *item)
{
   ui->lpu_sprav->setText(item->text().trimmed());
}
 
Надо, что бы в окне которое создается в предыдущей функции при нажатии на Enter, срабатывала функция:
void lgot_rech::on_clicked(QTableWidgetItem *item)
Она работает пока только при двойном клике мышью!

Пользуемся тегом code
« Последнее редактирование: Декабрь 28, 2009, 12:35 от Пантер » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


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

void QTableWidget::itemActivated ( QTableWidgetItem * item )   [signal]
Записан

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

void QTableWidget::itemActivated ( QTableWidgetItem * item )   [signal]
О благодарю, я так и думал что должно же быть что то легкое, а вот об этом не подумал.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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