【发布时间】:2014-10-07 01:43:28
【问题描述】:
我正在使用QTableView 来可视化一些特定的图像。用户可以单击 TableView 的图像,该图像将在另一个更大的 QLabel 类型的窗口中被放大。我可以通过在 TableView 上单击鼠标来实现这一点,但我想为键盘按钮 “up” 和 “down” 启用它。我的意思是,一旦用户单击 TableView 上列出的图像之一,如果用户使用键盘按钮 "up" 和 "down" 更改为其他图像>,我想检测按键并将其连接到QLabel,它会放大特定的选定图像。
所以,我的意思是我实际上想在QTableView 上检测keypress。直到现在我还没有设法做到这一点。我在QTableView 的viewPort 上安装了eventfilter,在eventfilter 函数中我可以检测到mousebuttonpress,但我无法检测到keypress。
为了向您展示我是如何实现的,我制作了简单的程序来测试QTableView 和Keypress。下面,我给出了那个简单程序的mainWindow实现代码。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStandardItemModel>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->numberTable->viewport()->installEventFilter(this);
connect(ui->FillUp, SIGNAL(clicked()), this, SLOT(fillUp()));
}
void MainWindow::fillUp()
{
model = new QStandardItemModel(3, 3, this);
int counter = 0;
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
QStandardItem * itm = new QStandardItem;
counter++;
itm->setText(QString::number(counter));
model->setItem(i, j, itm);
}
}
ui->numberTable->setModel(model);
ui->numberTable->show();
}
bool MainWindow::eventFilter(QObject * obj, QEvent * ev)
{
if(obj == ui->numberTable->viewport())
{
if(ev->type() == QEvent::MouseButtonPress)
{
qDebug()<<"Mouse button pressed!\n";
}
else if(ev->type() == QEvent::KeyPress)
{
qDebug()<<"Key button pressed\n";
}
}
return QObject::eventFilter(obj, ev);
}
MainWindow::~MainWindow()
{
delete ui;
}
程序确实输出“按下鼠标按钮”,但没有输出键盘按下。你能告诉我我在哪里做错了吗?
谢谢
【问题讨论】:
-
也许尝试在桌子上安装事件过滤器:
ui->numberTable->installEventFilter(this);?删除if(obj == ui->numberTable->viewport())值得一试。
标签: c++ qt keypress qtableview