QTableWidget自带按键响应,当按键向上向下时可以看到QTableWidget选中行发生变化。
现在的问题是,QTableWidget已处理按键时间,父窗口也需要处理这个按键信号但是却接收不到按键信号。
解决方法如下:
使用Qt的事件过滤器,捕获QTableWidget对象所发生的事件。
1、为QTableWidget父窗口安装事件过滤器
tablewidget->installEventFilter(this);
2、父窗口重写bool eventFilter(QObject *obj, QEvent *e) 函数
bool MainWidget::eventFilter(QObject *obj, QEvent *e)
{
if (obj == tablewidget)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
if (keyEvent->key() == Qt::Key_Up)
{
MoveItem(false);
return true;
}
else if (keyEvent->key() == Qt::Key_Down)
{
MoveItem(true);