QtWebkitキーボードマウスイベントフィルタリングについて
QTのQObjectオブジェクトには、void installEventFilter(QObject*filterObj);
ここでのパラメータfilterObjもQObjectであり、このオブジェクトはイベントをフィルタリングし、再ロードする
QObjectの虚関数:virtual bool eventFilter(QObject*watched,QEvent*event);
最初のパラメータはイベントをフィルタするオブジェクトであり、2番目のパラメータは受信されたイベントです.
static_を使うことができますcastをQMouseEventまたはQKeyEventに変換します.
この関数の戻り値falseはフィルタリングしないことを表し、上層にも伝わり、trueは食べて上層に戻らないことを表す.
次の例のプログラムは、マウスの右ボタンとESCボタンのフィルタリングです.
クラス定義:
クラス実装:
//テストマスタ
ここでのパラメータfilterObjもQObjectであり、このオブジェクトはイベントをフィルタリングし、再ロードする
QObjectの虚関数:virtual bool eventFilter(QObject*watched,QEvent*event);
最初のパラメータはイベントをフィルタするオブジェクトであり、2番目のパラメータは受信されたイベントです.
static_を使うことができますcastをQMouseEventまたはQKeyEventに変換します.
この関数の戻り値falseはフィルタリングしないことを表し、上層にも伝わり、trueは食べて上層に戻らないことを表す.
次の例のプログラムは、マウスの右ボタンとESCボタンのフィルタリングです.
クラス定義:
class FooBrowser : public QWebView
{
Q_OBJECT
public:
FooBrowser(QWidget* parent = 0);
Q_SIGNALS:
protected:
bool eventFilter(QObject *obj, QEvent *ev);
};
クラス実装:
FooBrowser::FooBrowser(QWidget* parent) : QWebView(parent)
{
// For WebView
installEventFilter(this);
// For WebPage
page()->installEventFilter(this);
// For WebFrame
page()->mainFrame()->installEventFilter(this);
}
bool FooBrowser::eventFilter(QObject *obj, QEvent *ev)
{
if (ev->type() == QEvent::MouseButtonPress ||
ev->type() == QEvent::MouseButtonRelease ||
ev->type() == QEvent::MouseButtonDblClick){
QMouseEvent *mouseev = static_cast<QMouseEvent *>(ev);
if (mouseev->button() == Qt::RightButton) {
qDebug("Eat right button!");
return true;
}
}
if (ev->type() == QEvent::KeyPress ||
ev->type() == QEvent::KeyRelease) {
QKeyEvent *keyev = static_cast<QKeyEvent *>(ev);
qDebug("Eat key %d", keyev->key());
if (keyev->key() == Qt::Key_Escape) {
reload();
}
return true;
}
return false;
}
//テストマスタ
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
FooBrowser *b = new FooBrowser;
b->setWindowFlags(Qt::FramelessWindowHint);
b->setGeometry(0,0,1280,720);
b->load(QUrl("http://www.google.com"));
b->show();
return a.exec();
}