Я использую QTableView
для визуализации определенных изображений. Пользователь может щелкнуть изображения TableView, и это изображение будет увеличено в другом большем окне типа QLabel
. Я могу сделать это возможным с помощью щелчков мышью в TableView, но я хотел бы включить его для кнопок клавиатуры "вверх" и "вниз". Я имею в виду, что после того, как пользователь щелкнет одно из изображений, перечисленных в TableView, если пользователь переключится на другие изображения с помощью кнопок клавиатуры "вверх" и "вниз", я хочу обнаружить нажатие клавиши и подключить его к QLabel
, который увеличивает это конкретное выбранное изображение.
Итак, я имею в виду, что на самом деле хочу обнаружить keypress
на QTableView
. До сих пор мне это не удавалось. Я устанавливаю eventfilter
на viewPort
из QTableView
, и в функции 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())
стоит попробовать. - person vahancho   schedule 13.08.2014