Russian Qt Forum

Qt => Общие вопросы => Тема начата: kadr от Декабрь 25, 2009, 15:30



Название: Отловить нажатие Enter
Отправлено: 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()));
          }
   }
не работает!


Название: Re: Отловить нажатие Enter
Отправлено: Пантер от Декабрь 25, 2009, 16:59
Тут нужно через installEventFilter.
Не забывай, что есть еще Qt::Key_Enter.
Но что-то мне кажется, что это все не нужно. Опиши чего ты хочешь добиться.


Название: Re: Отловить нажатие Enter
Отправлено: kadr от Декабрь 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


Название: Re: Отловить нажатие Enter
Отправлено: Пантер от Декабрь 28, 2009, 12:40
void QTableWidget::itemActivated ( QTableWidgetItem * item )   [signal]


Название: Re: Отловить нажатие Enter
Отправлено: kadr от Декабрь 29, 2009, 14:42
void QTableWidget::itemActivated ( QTableWidgetItem * item )   [signal]
О благодарю, я так и думал что должно же быть что то легкое, а вот об этом не подумал.