gpt4 book ai didi

c++ - 如何在 eventFilter 中将 Left_Key 和 Right_Key 事件相互更改?

转载 作者:太空狗 更新时间:2023-10-29 21:44:58 25 4
gpt4 key购买 nike

我有一个可编辑的QWebView。在 eventFilter 中,我想将 Qt::Left_Key 事件更改为 Qt::Right_Key,对于 webview 中的 textCursor 位置,反之亦然。这是我的代码:

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(例如),再次移动到右侧并且似乎它的位置不不改变。

我该如何解决这个问题?谁能帮忙?

最佳答案

我检查我对 spontaneous 的直觉QEvent 中可用的属性。

这里是一个示例,展示了如何在 QTextEdit 中使用反向键导航(左、右)。转换到您的 WebView 应该是微不足道的。

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);
}

关于c++ - 如何在 eventFilter 中将 Left_Key 和 Right_Key 事件相互更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18799731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com