我使用QTableView
来显示某些特定图像。用户可以单击TableView的图像,该图像将在QLabel
类型的另一个更大的窗口中放大。我可以通过鼠标点击TableView来实现这一点,但我想为键盘按钮启用它" up" 和 "向下" 即可。我的意思是,一旦用户点击TableView上列出的其中一个图像,如果用户使用键盘按钮" up" 和&更改为其他图像#34;向下" ,我想检测按键并将其连接到放大该特定所选图像的QLabel
。
所以,我的意思是我实际上想要检测keypress
上的QTableView
。到现在为止,我还没有设法做到这一点。我在eventfilter
的{{1}}上安装了viewPort
,在QTableView
函数中我可以检测到eventfilter
,但我无法检测到mousebuttonpress
。
为了向您展示我是如何接近实施的,我已经使用keypress
和QTableView
制作了简单的测试计划。下面,我已经给出了该简单程序Keypress
实现的代码。
mainWindow
程序输出"按下鼠标按钮" ,但键盘按下没有输出。你能否让我知道我在做错误的地方?
由于
答案 0 :(得分:1)
我遇到同样的麻烦。使用你的想法,如果打印我得到的事件类型:"绘制小部件" (12)而不是" KeyPress" (6)。
bool AR_Principal::eventFilter(QObject * obj, QEvent * ev){
qDebug() << ev->type();
if(obj == ui->tableView->viewport())
{
if(ev->type() == QEvent::MouseButtonPress)
{
qDebug()<<"Mouse button pressed";
}
else if(ev->type() == QEvent::KeyPress)
{
qDebug()<<"Key button pressed";
}
else if(ev->type() == QEvent::Paint)
{
qDebug()<<"Paint widget" ;
}
}
return QObject::eventFilter(obj, ev);
}
如果使用QEvent :: Paint事件,则此方法有效。或者像其他答案一样说:
ui->tableView->installEventFilter(this);
并且不要使用条件:
if(obj == ui->tableView->viewport())
但更有效的解决方案是:
connect(ui->tableView->selectionModel(), SIGNAL(currentChanged (const QModelIndex & , const QModelIndex & )), SLOT(selectedItem(const QModelIndex &)));
其中selectedItem(const QModelIndex&amp;)是一个私有插槽函数,您可以在其中对所选数据执行任何操作(使用其索引)