如何从键盘为 QTableWidget 创建信号?

tra*_*gan 3 qt keypress signals-slots qtablewidget

我有一张桌子,可以用左、右、上、下按钮在里面移动。现在我需要在某个单元格中创建一个 SIGNAL 并按下空格键。这个信号也应该带来那个单元格的坐标。我尝试使用 QTableWidget 的标准信号,但它不起作用。我该如何解决这个问题?

len*_*ena 6

创建一个单独的头文件,即“customtable.h”,然后在设计器中您可以将现有的 QTableWidget 提升到此类。

class customTable:public QTableWidget
{
   Q_OBJECT
   public:
      customTable(QWidget* parent=0):QTableWidget(parent){}       
   protected:
      void keyPressEvent(QKeyEvent *e)
      {
         if(e->key()==Qt::Key_Space)
         {
            emit spacePressed(this->currentRow(),this->currentColumn());
         }
         else { QTableWidget::keyPressEvent(e); }
      }
   signals:
      spacePressed(int r, int c);
};
Run Code Online (Sandbox Code Playgroud)


Rei*_*ica 6

您可以使用事件过滤器来执行此操作:

class TableSpaceWatcher : public QObject {
  Q_OBJECT
  bool eventFilter(QObject * receiver, QEvent * event) override {
    auto table = qobject_cast<QTableWidget*>(receiver);
    if (table && event->type() == QEvent::KeyPress) {
       auto keyEvent = static_cast<QKeyEvent*>(event);
       if (keyEvent->key() == Qt::Key_Space)
          emit spacePressed(table->currentRow(), table->currentColumn());
    }
    return false;
  }
public:
  using QObject::QObject;
  Q_SIGNAL void spacePressed(int row, int column);
  void installOn(QTableWidget * widget) {
     widget->installEventFilter(this);
  }
};

QTableWidget table;
TableSpaceWatcher watcher;
watcher.installOn(&table);
Run Code Online (Sandbox Code Playgroud)