当用户通过在QTableWidget中按向上或向下箭头键更改键盘行时,我不知道如何发出信号。之后,我将不得不使用此信号对我的视频进行一些更改。
我该如何实现?
答案 0 :(得分:1)
通过添加两个信号对类QTableWidget进行子类化:
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();
};
在您使用该视频的班级中,添加两个插槽(假设您的班级名为yourClass
):
public slots :
void onKeyUpPressed();
void onKeyDownPressed();
现在您可以使用主类中的信号和插槽连接,如下所示:
myTableWidget* table = new myTableWidget();
connect(table, SIGNAL(keyUpPressed()), this, SLOT(onKeyUpPressed()));
connect(table, SIGNAL(keyDownPressed()), this, SLOT(onKeyDownPressed()));
然后,在您的广告位中,您可以处理您的视频。
void yourClass::onKeyUpPressed()
{
// do something here
}
void yourClass::onKeyDownPressed()
{
// do something else here
}
另一种方法是安装event filter。
您的评论中的 编辑,您的班级会继承QStyledItemDelegate
,因此您可以像这样覆盖函数eventFilter:
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);
}
然后,yourClass
中的广告位也是如此。
答案 1 :(得分:1)
要从关键事件中捕获信号,您可以继承QTableWidget
并覆盖方法keyPressEvent(QKeyEvent *event)
,例如:
.H文件:
class CustomTableWidget : public QTableWidget
{
Q_OBJECT
protected:
void keyPressEvent(QKeyEvent *event);
public:
explicit CustomTableWidget(QWidget *parent = 0);
~CustomTableWidget();
signals:
void upEvent(const QModelIndex &index);
void downEvent(const QModelIndex &index);
.CPP文件:
void CustomTableWidget::keyPressEvent(QKeyEvent *event)
{
switch(event->key()) {
case Qt::Key_Up: emit upEvent(currentIndex());
break;
case Qt::Key_Down: emit downEvent(currentIndex());
break;
default: QTableWidget::keyPressEvent(event);
}
}
答案 2 :(得分:0)
您可能希望连接到信号currentCellChanged
这将处理鼠标点击和键盘移动,并为您提供新选择的单元格的索引。