【问题标题】:QT how to handle a button-press event from the external C++ classQT如何处理来自外部C++类的按钮按下事件
【发布时间】:2017-02-28 20:50:43
【问题描述】:

我想编写一个名为“buttonHandler”的外部 C++ 类,它专门支持 Qt 中的按钮单击事件,但我不知道如何从“mainContainer”类创建到对象(按钮)的硬链接并同时由另一个班级处理。这甚至可能吗?

【问题讨论】:

  • 外部 C++ 类是什么意思?
  • 你了解 Qt 信号和槽的工作原理吗?
  • @eyllanesc 我想将界面元素(对象)作为自己与事件处理程序(另一个 .cpp 文件)分开 - 在这种情况下,一个外部类“buttonHandler”故意只处理按钮单击事件,没有别的。
  • @FredLarson 是的,我大致了解这些机制,但我找不到任何提示如何从外部类级别实际处理事件。
  • 点击事件是 GUI 的一部分。可以分离的是点击完成时执行的逻辑

标签: c++ qt button eventhandler qtcore


【解决方案1】:

我想你正在寻找event filters。基本上你有一个对象(派生自QObject监听其他对象的事件。它被称为对象处理自己的事件之前。一个简单的例子:

bool ButtonPressHandler::eventFilter(QObject* obj, QEvent* event) {
  if (obj == the_main_container && event->type() == QEvent::MousePress) {
    /* do what ever you have to do */
    return true; // true to stop processing events, false to forward the event
  }

  return false;
}

在你的代码的某个地方你链接两者:

the_main_container->installEventFilter(the_button_press_handler);

【讨论】:

  • 感谢您的建议,但在我的情况下它不起作用。也许我得从头开始改造它。
  • 不客气。我强烈推荐这种模式,因为它避免了对基本控件的不必要继承,并且允许您轻松注入代码。如果您必须从非 Qt 类中执行此操作,您可以使用委托或回调模式来执行此操作并在 Qt 端创建事件过滤对象。
  • @TheInvisibleMan,你能解决这个问题还是需要进一步的帮助?
  • 感谢您的关注,但同时我放弃了那个项目。抱歉耽误您的时间。
猜你喜欢
  • 2013-07-03
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多