-Subklassen der Klasse QTableWidget indem zwei Signale:
class myTableWidget: public QTableWidget
{
public:
myTableWidget() {}
~myTableWidget() {}
private:
void keyPressEvent(QKeyEvent* event)
{
if(event->key() == Qt::Key_Up)
emit keyUpPressed();
else if(event->key() == Qt::Key_Down)
emit keyDownPressed();
else
QWidget::keyPressEvent(event);
}
signals :
keyUpPressed();
keyDownPressed();
};
In Ihrer Klasse, wo Sie das Video verwenden, fügen Sie zwei Schlitze (und lassen Sie uns sagen, dass Ihre Klasse yourClass
genannt wird):
public slots :
void onKeyUpPressed();
void onKeyDownPressed();
Jetzt können Sie die Signale und Steckplätze Verbindung in Ihrer Hauptklasse wie folgt verwenden:
myTableWidget* table = new myTableWidget();
connect(table, SIGNAL(keyUpPressed()), this, SLOT(onKeyUpPressed()));
connect(table, SIGNAL(keyDownPressed()), this, SLOT(onKeyDownPressed()));
Dann können Sie in Ihren Slots Ihr Video verarbeiten.
void yourClass::onKeyUpPressed()
{
// do something here
}
void yourClass::onKeyDownPressed()
{
// do something else here
}
Eine Alternative ist die Installation eines event filter.
EDIT: aus Ihrem Kommentar, Ihre Klasse erbt QStyledItemDelegate
so können Sie einfach eventFilter wie dies die Funktion außer Kraft setzen:
bool myTableWidget::eventFilter(QObject *obj, QEvent *event)
{
if(event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if (keyEvent->key() == Qt::Key_Up)
emit keyUpPressed();
else if(event->key() == Qt::Key_Down)
emit keyDownPressed();
}
// standard event processing
return QStyledItemDelegate::eventFilter(obj, event);
}
Dann ist es das gleiche für die Schlitze in yourClass
ist.