- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
类如何通过QObject::event()接收事件函数被传递给它的数据成员之一,然后由它处理事件?
例如,如果我有
class A
{
B b;
public:
event(QEvent *);
//other members and functions
};
和
class B
{
public:
event(QEvent *);
//other members
};
假设我使用 postEvent()
从另一个函数(一个事件过滤器)将事件发送到 A
的对象,据我所知,event( )
A
函数接收事件。有没有办法将事件传递给 A
的成员,B
将处理该事件?
最佳答案
使用QCoreApplication::sendEvent
:
class B : public QObject
{
public:
bool event(QEvent *);
};
class A : public QObject
{
// Correct
B b{this};
// Wrong
B bad;
public:
bool event(QEvent * ev) override {
if (ev->type() == my_event_type) {
// Correct
return QCoreApplication::sendEvent(&b, ev);
// Wrong
return b.event(&ev);
}
return QObject::event(ev);
}
};
在 C++98 中,如果没有统一初始化,则必须改用初始化列表:
class A : public QObject
{
B b;
public:
A(QObject * parent = 0) : QObject(this), b(this) {}
bool event(QEvent * ev) { /*...*/ };
};
B
的出身关系对于确保它与 A
位于同一线程中至关重要。 A
的用户可以自由地将它移动到任何线程——这是 QObject
的契约(破坏它是个坏主意)。当它们这样做时,sendEvent
会变成未定义的行为,除非 B
在同一个线程中。确保相关对象跟随线程的规范方法将其更改为它们应该跟踪的对象的父级。
不要直接调用 QObject::event()
:它只能由 Qt 调用。直接调用它会绕过事件过滤器并导致 B
的行为不像 QObject
。 QObject
契约的一部分是事件过滤器(在不同级别)可以修改它的功能。直接调用 event()
会中断 LSP对于 B
的所有用户!:他们会使用 QObject
,但它不像 QObject
会了。
关于c++ - 如何将 QEvent 传递给接收者拥有的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42352525/
我创建了一个 Qt 项目,并添加了一个 QPushButton,其样式是我使用 QEvent 和 QMouseEvent 自定义的。我给这个按钮加了一个插槽,但它不起作用。这是一个像我的项目: 标题
我想调试事件处理代码并想转换 QEvent::Type enum 的值转换为人类可读的字符串。 QEvent有一个 Q_GADGET宏,所以大概有办法把它拉下来? 最佳答案 将事件输出到调试流时,Qt
我有两个小部件 ParentWidget 和 ChildWidget 都派生自 QWidget 并且都覆盖 void dragEnterEvent(QDragEnterEvent *event)。 现
类如何通过QObject::event()接收事件函数被传递给它的数据成员之一,然后由它处理事件? 例如,如果我有 class A { B b; public: eve
情况如下: 我有一个从 QTabWidget 子类化的自定义小部件,我已经实现它以接受文件的 QDropEvents。当文件放在 TabWidget 上时,它们会被打开进行编辑。这部分工作正常。但是,
我有这个简单的代码,当 ESC 键按下 PRINTS 时,它似乎执行“两次”而不是仅触发一次。 Python 3.6.2 x86 + PyQt 5.9 #!/usr/bin/env python3 #
我正在查看来自文档 http://doc.qt.io/qt-5/statemachine-api.html 的 Qt 示例: bool eventTest(QEvent *e) override {
我有一个安装了事件过滤器的 QMainWindow。在我打开和关闭 QDialog 之后,键盘箭头键没有响应,因为 QMainWindow 只接收 ShortcutOverride 事件而不是 Key
MyWindow 继承自 QMainWindow。 MyWindow 包含一个显示动画的 QGLWidget。 问题是每当我打开菜单或调整窗口大小时动画都会暂停。 动画是通过定期调用QCoreAppl
在 PyQt 下,我正在为 Qt Events 计时,我想用时间写一个人类可读的字符串名称。使用 PySide2 时,只需调用 str() 即可获得字符串名称,但使用 PyQt5 时,它会返回一个作为
以下是 previous question 的后续. 我有一个 Qt 对话框窗口,其中包含一个 QPlainTextEdit 小部件,我已经按照示例 here 为它创建了一个软件输入面板 (SIP)
您好:我正在后台运行一个时钟,我想禁用关闭事件并通知用户首先停止时钟。我已经知道 closeEvent 的重新实现,但是我想在 changeEvent 的重新实现中尝试一下。这是关于它的代码: voi
在带有 C++ 的 Qt 中,我创建了一个窗口,里面有一个小的 QWidget。 每次 QEvent::Enter、QEvent::Leave 或 QEvent::MouseMove 被触发时,小 Q
我目前正在移植 small application从 PyGTK 到位于系统托盘中的 PySide,它会定期检查服务器的更新。 当我最初写这篇文章时,我使用了一个自定义状态模型来表示它的行为: ini
首先,对于问题的长度表示歉意。 我正在尝试将自定义 Qt 事件从子窗口小部件传播到顶级父窗口小部件,以便根据事件类型而不是链接信号触发某些操作。 Qt 文档建议使用具有 accept() 和 igno
当我的鼠标位于labelname(QLabel)时,我希望我的程序打印“mouse on label name”,并打印“mouse not on label” name"当我的鼠标不在 labeln
在 Qt 文档中,EnterEditFocus 是一个关于编辑器小部件获得编辑焦点的事件,但使用 Qt 4.5.3 编译失败,“EnterEditFocus”不是“QEvent”的成员。怎么了? 最佳
我有一个 QT C++ 应用程序,它有多个线程在运行,线程使用 QCoreApplication::postEvent 机制相互传递信息。 QCoreApplication::postEvent 文档
我正在使用 plist 文件以允许我的 Qt 应用程序能够直接从查找器打开文件。不幸的是,有时在某些系统上(如下所述)应用程序崩溃/卡住。 此问题仅在某些客户端计算机上出现,并且仅当我在使用 10.6
背景 我用 QLineEdit 和几个 QPushButtons 制作了一个自定义小部件,以将其与自定义项目委托(delegate)一起使用: class LineEditor : public QW
我是一名优秀的程序员,十分优秀!