- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近,我需要用一个自定义的事件类型MyEvent替换Pong Gui的按键事件类型(以使用UDP信号代替<-->来控制游戏)。但是问题是似乎对于自定义事件我需要手动发送或发布它们,而事件过滤器无法接收自定义事件(内置的按键或鼠标单击似乎不需要手动发送)。事件过滤器的安装方式与mainwindow.cpp中相同:ui-> boardView-> installEventFilter(gameloop iLoop);
eventfilter在gameplay.cpp中实现:
'''
bool Gameplay::eventFilter(QObject *target, QEvent *e)
{
Q_UNUSED(target);
bool handled = false;
if(e->type() == MyEventType)
{
MyEvent *myevent = (MyEvent *)e;
if ( myevent->sg >0)
{
//pong paddle move left
iP1Direction = (iP1Direction == 0 ? -5 : 0);
handled = true;
}
else if ( myevent->sg <0 )
{
//pong paddle move right
iP1Direction = (iP1Direction == 0 ? 5 : 0);
handled = true;
}
}
if(e->type() == MyEventType)
{
qDebug()<<"abc";
handled = true;
}
return handled;
}
#include <QtWidgets/QApplication>
#include "mainwindow.h"
#include "MyEvent.h"
#include <iostream>
#include <cmath>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
for(int i=0;i<1000;i++){
MyEvent myEvent1(MyEventType);
myEvent1.set_ch(1);
myEvent1.load_sg(1);
QCoreApplication::postEvent(&w, &myEvent1);
}
return a.exec();
}
'''
'''
//cited from https://github.com/ynonp/Pong
#include <QPen>
#include <QResizeEvent>
#include <QDebug>
#include <QtWidgets/QApplication>
#include "mainwindow.h"
#include "MyEvent.h"
#include <QCoreApplication>
#include <QEvent>
#include <QObject>
#include <QDebug>
#include <iostream>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
iScore ( 0 )
{
ui->setupUi(this);
QGraphicsScene *scene = new QGraphicsScene(this);
QGraphicsRectItem *p1 = new QGraphicsRectItem(0, 0, 80, 20);
p1->setBrush(QBrush(Qt::blue));
QGraphicsRectItem *p2 = new QGraphicsRectItem(0, 0, 80, 20);
p2->setBrush(QBrush(Qt::green));
QGraphicsEllipseItem *ball = new QGraphicsEllipseItem(0, 0, 15, 15);
ball->setBrush(QBrush(Qt::magenta));
ui->boardView->setScene(scene);
iLoop = new Gameplay(*scene, p1, p2, ball, this);
QSize m(scene->sceneRect().size().width() + 10, scene->sceneRect().size().height() + 10);
ui->boardView->setMinimumSize(m);
resize(minimumSize());
ui->boardView->installEventFilter(iLoop);
QObject::connect(iLoop, SIGNAL(goal(int)),
this, SLOT(addScore(int)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::addScore(int count)
{
iScore += count;
ui->lcdNumber->display(iScore);
}
最佳答案
显示的代码有一些基本问题。首先,如果您想让ui->boardView
接收事件,则应将事件发送到ui->boardView
:而不是像在...中那样发送给MainWindow
实例。
MainWindow w;
w.show();
for (int i = 0; i < 1000; i++) {
MyEvent myEvent1(MyEventType);
myEvent1.set_ch(1);
myEvent1.load_sg(1);
QCoreApplication::postEvent(&w, &myEvent1);
}
delete
d进行处理,因此通常来说,您必须在堆上分配事件。因此,上面的代码将导致在无效的内存位置上调用
delete
,从而导致未定义的行为。它应该更改为...
MainWindow w;
w.show();
for (int i = 0; i < 1000; i++) {
auto *myEvent = new MyEvent1(MyEventType);
myEvent1->set_ch(1);
myEvent1->load_sg(1);
QCoreApplication::postEvent(ui->boardView, myEvent1);
}
关于c++ - 如何在子小部件下使用eventfilter来捕获自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60424216/
这已经困扰我两天多了,所以我想我应该问一下。我在 Win7 上使用 Qt 4.5.3(用 VC2008 编译)。 我有 MyGraphicsView(继承 QGraphicsView)和 MyFilt
我可以设置我的eventFilter来忽略小部件的“默认”事件,例如。 mousePressEvents 等?或者这两者可以混合在一起吗? 在我的代码中,我有一个 mousePressEvent 和一
我的自定义标签上有一个 eventFilter,我想用它来嗅探双击。这可能吗? self.installEventFilter(self) # Handles mouse events def
我有一个小问题,我需要将我的事件过滤器设置为 QComboBox 弹出窗口。我需要在按下左右键时捕获事件。我该怎么做? 谢谢! 最佳答案 您需要在 QComboBox 的 view() (http:/
我已经用谷歌搜索了一段时间,我发现基本上,一些网页说没有大的差异。除了一些点: EventFilter 在 EventHandler 之前执行 EventFilter 对 event.Consume(
我有一个带有数百个自定义按钮的应用程序,每个按钮都需要多个信号连接。连接调用似乎非常慢,因此我尝试使用输入和离开事件通过主窗口的 eventFilter 连接/断开每个按钮的信号。 但是,有时这些事件
我的程序使用一个 ui-form-file,它在其他小部件旁边包含一个名为“grip”(其对象名称)的标签。当我运行代码时,我看到代码行 grip was not detected 并且我想知道为什么
我正尝试在 PyQT5 中实现一个事件,但出现此错误: TypeError: installEventFilter(self, QObject): argument 1 has unexpected
我的事件过滤器存在根本性错误,因为它让每个 单个事件通过,而我想停止一切。我已经阅读了很多关于 QEvent、eventFilter() 等的文档,但显然我遗漏了一些重要的东西。本质上,我正在尝试基于
在这里和其他类似 qtcentre 的地方搜索我看到这个问题已经出现但似乎无法让它工作。我有一个带有 QSplitter 的 MainWindow 小部件,它包含两个 Pane 小部件(从 QFram
我在我的 QLineEdit 上安装了一个 EventFilter,这样我就可以处理焦点事件以允许 QFileDialog 在它出现时显示获得焦点。 我添加了以下几行: QLineEdit *proj
我正在尝试创建一个 QLineEdit 元素,其文本将在单击时自动复制到剪贴板。 我创建了以下 eventFilter 来捕获点击事件并将其安装在适用的元素上: bool MainWindow::ev
当我在其中一个行编辑器中插入一个数字时,我想让一个按钮可见。按钮和 linedit 在同一行。我知道 lineedit 的位置或名称,但我不知道如何链接回按钮以使其可见或能够更改颜色。 如果您查看 e
我希望在选择 qtreeview 时按下回车键时发生“事件”。因为我不喜欢将 qtreeview 子类化(对设计者来说更容易)——我尝试安装一个事件过滤器。然而,这似乎没有用: 该类仅包含一个公共(p
我遇到了 QTextEdit 的问题。我正在为 QTextEdit 使用 eventFilters。当我在 QTextEdit 中按下小键盘 (0-9) 中的键时,它将自动完成句子这是连接那个号码。例
我是这里的 Qt 新用户。我有一个项目,我要使用 pyuic 生成的 .py 文件,但我无权访问它。 我还应该在某些对象上安装事件过滤器。是否可以在生成的 .py 文件之外使用 object.inst
它根本不起作用。我启用了鼠标跟踪,然后安装了事件过滤器,一切正常,除了 MouseMove 事件。有什么帮助吗? #include "mainwindow.h" #include "ui_mainwi
我希望能够删除使用 lambda 设置的事件过滤器。我不确定这是否可能? 我看过这个使用内部类的例子:http://www.java2s.com/Tutorials/Java/JavaFX/1120_
当我的鼠标位于labelname(QLabel)时,我希望我的程序打印“mouse on label name”,并打印“mouse not on label” name"当我的鼠标不在 labeln
我尝试创建一个可以处理放置事件的 QTableView。出于应用程序架构的原因,我希望通过我的 eventFilter 来完成(它也处理一些用于剪贴板交互的 QAction 触发器)。但是 drop-
我是一名优秀的程序员,十分优秀!