未能检测到" Keypress"在QTableView上?

时间:2014-08-13 15:43:52

标签: c++ qt keypress qtableview

我使用QTableView来显示某些特定图像。用户可以单击TableView的图像,该图像将在QLabel类型的另一个更大的窗口中放大。我可以通过鼠标点击TableView来实现这一点,但我想为键盘按钮启用它" up" "向下" 即可。我的意思是,一旦用户点击TableView上列出的其中一个图像,如果用户使用键盘按钮" up" &更改为其他图像#34;向下" ,我想检测按键并将其连接到放大该特定所选图像的QLabel

所以,我的意思是我实际上想要检测keypress上的QTableView。到现在为止,我还没有设法做到这一点。我在eventfilter的{​​{1}}上安装了viewPort,在QTableView函数中我可以检测到eventfilter,但我无法检测到mousebuttonpress

为了向您展示我是如何接近实施的,我已经使用keypressQTableView制作了简单的测试计划。下面,我已经给出了该简单程序Keypress实现的代码。

mainWindow

程序输出"按下鼠标按钮" ,但键盘按下没有输出。你能否让我知道我在做错误的地方?

由于

1 个答案:

答案 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;)是一个私有插槽函数,您可以在其中对所选数据执行任何操作(使用其索引)