如何在事件过滤器中相互更改Left_Key和Right_Key事件
How can change Left_Key and Right_Key events to each other in eventFilter?
我有一个可编辑的QWebView
。在eventFilter
中,我想将 Qt::Left_Key
事件更改为 Qt::Right_Key
,反之亦然,以便在 webview 中获取文本光标位置。这是我的代码:
bool MyClass::eventFilter(QObject *o, QEvent *e)
{
if(o == p->webView) {
switch(static_cast<int>(e->type()))
{
...
case QEvent::KeyPress:
if(static_cast<QKeyEvent*>(e)->key() == Qt::Key_Left) {
QKeyEvent* event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier);
QApplication::postEvent(p->webView, event);
return true;
}
else
if(static_cast<QKeyEvent*>(e)->key() == Qt::Key_Right) {
QKeyEvent* event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier);
QApplication::postEvent(p->webView, event);
return true;
}
break;
}
}
return QWidget::eventFilter(o,e);
}
但是当我创建一个 QKeyEvent 并将其发布到应用程序时,我猜 eventFilter 再次调用我发布到应用程序的 QKeyEvent 和向左移动的 webview textCursor(例如),再次向右移动,似乎它的位置没有改变。
如何解决这个问题?谁能帮忙?
我检查了我对QEvent
中可用的自发属性的直觉。
下面是一个示例,显示了它如何用于在QTextEdit
中反转键导航(左、右)。转置到 Web 视图应该是微不足道的。
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//install the filter for your "source" of key event
ui->sourceEdit->installEventFilter(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
bool MainWindow::eventFilter(QObject *src, QEvent *ev)
{
if (src == ui->sourceEdit) {
if (ev->type() == QEvent::KeyPress) {
if (ev->spontaneous()) {
qDebug() << "I am spontaneous";
QKeyEvent* keyEv = static_cast<QKeyEvent*>(ev);
if (keyEv->key() == Qt::Key_Left) {
QKeyEvent* event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier);
QApplication::postEvent(ui->sourceEdit, event);
return true;
} else if (keyEv->key() == Qt::Key_Right) {
QKeyEvent* event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier);
QApplication::postEvent(ui->sourceEdit, event);
return true;
}
} else {
//here pass all event that are not coming from the underlying System.
qDebug() << "not spontaneous";
}
}
}
return QMainWindow::eventFilter(src, ev);
}
相关文章:
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 错误:"Left of getValue must have class/struct/union"
- 使用 Key 对 C++ 中的哈希映射进行排序. 无法排序
- std::<key-value>不同类型的对向量
- .value( "key" , default) 不适用于空的 json 对象吗?
- 编译错误:"lvalue required as left operand of assignment" 不确定原因
- std::set<Key,Compare,Allocator>::find() 函数使用"<"运算符而不是"=="运算符背后的直觉是什么?
- std::move(key) 同时迭代unordered_map<字符串,字符串>?
- cpp / c ++中的grpc客户端代码,元数据x-api-key/x-goog-api-key不起作用,给了我语音A
- 黄金描述的C++ "Key Function"是什么?
- 输出 [left]=input[i] 行中的 c++ 代码中存在无效的类型错误
- 是否可以覆盖 "find" 和 "erase" boost::bimaps::bimap.left 的方法?怎么办?
- 从更新查询获取'Cannot insert duplicate key'
- C++指针算术"lvalue required as left operand of assignment"错误
- 用于"Ctrl + left arrow"和"Ctrl + right arrow"的八进制代码
- 重载运算符 [] 并且没有收到"lvalue required as left operand of assignment"错误
- 如何计算C++中非重复值的数量 std::map<Key,Values>
- 为什么这句话"The expression can be used only as the left-hand operand of a member function call"在 [expr.re
- 如何处理 MFC 中编辑框的'Left mouse Clicked'事件
- SWIG:包装 std::map<key 时编译器错误,val *>