Qt的控件QTableView嵌入到主窗口之后,可能导致主窗口的QKeyPressEvent()无法触发。解决的办法是在QTableView中加入setFocusPolicy(Qt::NoFocus)一句。
本文受到了http://blog.csdn.net/u010189457/article/details/53149805的启发。
下面以我的代码为例来说明。Mainwindow中有一个QTableView的派生类 tablevw.在不设置焦点策略时,mainwindow::keyPressEvent()无法被触发。只有设置才能触发key事件。
#include <QMainWindow>
#include <QKeyEvent>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
protected:
void keyPressEvent(QKeyEvent *);
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::keyPressEvent(QKeyEvent *e)
{
qDebug()<<"pressed";
if(e->key() == Qt::Key_A)
{
qDebug()<<"A";
}
}
#include "tablevw.h"
tablevw::tablevw(QWidget *parent) :
QTableView(parent)
{
//这句话决定了主窗口能否相应按键
setFocusPolicy(Qt::NoFocus);
}
tablevw::~tablevw()
{
}
设置焦点策略之后的效果: