Название: Отловить нажатие 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]
О благодарю, я так и думал что должно же быть что то легкое, а вот об этом не подумал.
|