#include <QTableWidget>class myTable : public QTableWidget{ Q_OBJECTpublic: myTable(QWidget *parent = 0); int mode;};
iSticks::iSticks(QWidget *parent) : QMainWindow(parent), ui(new Ui::iSticks){ ui->setupUi(this); ui->tableWidget->installEventFilter(new ev_filter(ui->tableWidget));...}
int mode;ev_filter::ev_filter(QObject *parent) : QObject(parent){ mode = ((myTable)parent).mode;}
ошибка: invalid conversion from 'QObject*' to 'QWidget*'
myTable tableWidget;int mode;ev_filter::ev_filter(QObject *parent) : QObject(parent){ tableWidget = qobject_cast<myTable>)parent; mode = tableWidget.mode;
ошибка: no match for 'operator=' in 'tableWidget = qobject_cast<myTable>' candidates are: myTable& myTable::operator=(const myTable&)ошибка: expected ';' before 'parent'
// ui->tableWidget->installEventFilter(new ev_filter(ui->tableWidget));
this->installEventFiter...
tableWidget = (myTable *)parent;
tableWidget = qobject_cast<myTable *>parent;
this->installEventFilter(this);
bool iSticks::eventFilter(QObject* pobj, QEvent* pe){ if(pe->type() != QEvent::KeyPress) return false; // Ловим только событие "keyPress" if(((QKeyEvent*)pe)->key()==Qt::Key_Space){ this->mode ^= 1; return true; } if(this->mode == 0) return false; // Если режим перемещения - будет работать функционал таблицы. return true;}
ошибка: invalid use of incomplete type 'struct QKeyEvent'
// это делается в конструкторе класса главной формы приложения (iSticks видимо)ui->tableWidget->installEventFilter(this)...bool iSticks::eventFilter(QObject* pobj, QEvent* pe){ // тут перехватываете события для тех объектов, для которых установлен фильтр // в вашем случае для tableWidget ...}
C++ (Qt)if(((QKeyEvent*)pe)->key()==Qt::Key_Space){
C++ (Qt)if (pe->key() == Qt::Key_Space) { ...}
C++ (Qt)QKeyEvent *keyEvent = static_cast<QKeyEvent *>(pe); if (keyEvent->key() == Qt::Key_Space) { ...}
if(pe->type() != QEvent::KeyPress) return false; // Ловим только событие "keyPress"
bool iSticks::eventFilter(QObject* pobj, QEvent* pe){ qDebug()<<"0"; if(pe->type() != QEvent::KeyPress) return false; // Ловим только событие "keyPress" qDebug()<<"1"; if(((QKeyEvent*)pe)->key()==Qt::Key_Space){ // если пробел - переключаем режим стрелок qDebug()<<"1"; this->mode ^= 1; return true; } if(this->mode == 0) return false; // Если режим перемещения - будет работать функционал таблицы. return true;}
C++ (Qt)#include <QKeyEvent>#include <QDebug>#include "myform.h" MyForm::MyForm(QWidget *parent) : QMainWindow(parent){ button = new QPushButton(this); button->setText("hello"); button->installEventFilter(this);} bool MyForm::eventFilter(QObject *obj, QEvent *event){ if (event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); qDebug() << obj; qDebug() << event; qDebug() << keyEvent->key(); } return false;}