c++ - 在 QT 中以编程方式执行鼠标事件
问题描述
我想从一个小部件传输鼠标事件并在另一个小部件上执行它,我通过信号发送鼠标事件。
void Eventhost::mousePressEvent(QMouseEvent* event)
{
emit SignalControl(event);
}
此事件被发送到在此处处理它的小部件;
void EventReceiver::mousePressEvent(QMouseEvent * event)
{
event->accept();
QWidget::mousePressEvent(event);
}
但是,即使该事件到达事件接收器,鼠标事件似乎也没有执行。我错过了什么?我会很感激任何意见
解决方案
尝试event->accept();
在 EventReceiver 中不使用它。如 Qt Docs 中所述:
可以传播的事件有一个 accept() 和一个 ignore() 函数,您可以调用它们来告诉 Qt 您“接受”或“忽略”该事件。如果事件处理程序对事件调用 accept(),则该事件不会被进一步传播;如果事件处理程序调用ignore(),Qt 会尝试寻找另一个接收器。
这就是QWidget::mousePressEvent(event);
里面没有被调用的原因void EventReceiver::mousePressEvent(QMouseEvent * event)
。
推荐阅读
- mongodb - Mongo 投影仅适用于字段和值
- python - 如何从 BertForSequenceClassification 加载微调模型并使用它来标记句子?
- c++ - C++ 无法使用模板参数创建模板构造函数
- ruby-on-rails - 动作文本(Trix):无法在 Rails 上以富文本添加图像(“附加文件”未保存)
- reactjs - 到达/路由器导航不使用 react-testing-library 更新历史对象
- r - 为什么 rownames() 不能在 R 中处理我的数据框?
- xcode - 由于 xcodebuild,终端第一次启动缓慢
- python - 将数据加载到 BigQuery:是否可以将自动检测到的架构与修改相结合?
- flutter - 使用 DocumentSnapshot 和 Firestore 在 null 上调用该方法
- azure - How can I add my external domain "uat.test.com " to my kubernetes cluster by using nginx-ingress?