C

事件处理器类

class SafeRenderer::EventHandler

事件处理器类为接收来自其他进程的 QSafeEvents 创建了一个平台特有的事件循环。 更多...

头文件 #include <EventHandler>
QtSafeRenderer 1.2

此类在 QtSafeRenderer 1.2 中引入。

公共函数

EventHandler(SafeRenderer::StateManager &manager, SafeRenderer::SafeWindow &windowArg, SafeRenderer::OutputVerifier &outputVerifierArg)
EventHandler(SafeRenderer::StateManager &manager, SafeRenderer::SafeWindow &windowArg)
voidhandleEvents() const
voidinstallEventFilter(SafeRenderer::EventFilter filterFunction)
voidstop() const

详细描述

成员函数文档

EventHandler::EventHandler(SafeRenderer::StateManager &manager, SafeRenderer::SafeWindow &windowArg, SafeRenderer::OutputVerifier &outputVerifierArg)

用输出验证器构造 EventHandler 类。必须给出对 StateManager 实例的有效引用。事件处理器使用关联到 SafeWindow 的引用 windowArg 进行初始化。将 OutputVerifier 实例的引用给出给 outputVerifierArg

EventHandler::EventHandler(SafeRenderer::StateManager &manager, SafeRenderer::SafeWindow &windowArg)

构造 EventHandler 类。必须给出对 StateManager 实例的有效引用。事件处理器使用关联到 SafeWindow 的引用 windowArg 进行初始化。

void EventHandler::handleEvents() const

进入事件接收循环,并等待直到 stop() 被调用。

void EventHandler::installEventFilter(SafeRenderer::EventFilter filterFunction)

安装回调 filterFunction,它在新事件接收时被调用。

然后 filterFunction 是以下函数类型的指针

bool filterFunction(const QSafeEvent &event);

该函数在事件传递到 StateManager 类之前被调用。如果 filterFunction 返回 true,则事件不会被转发到 StateManager 类。否则事件将被传递到 StateManager 类。

使用filterFunction回调,可以钩连安防应用中的QSafeEvents。例如,这些钩子可以用于处理心跳超时或根据系统事件触发安全项目状态变更。

以下示例显示了如何安装事件过滤器以及如何使用QSafeEventVisibility事件来触发透明度转换动画。类似地,您可以从任何外部事件触发状态转换,例如SafeRenderer::QSafeEventSystem

要触发的QML转换定义如下:

SafePicture {
    id: iconBattery
    objectName: "iconBattery"
    width: 30
    height: 30
    color: "#e41e25"
    source: "qrc:/iso-icons/iso_grs_7000_4_0247.dat"
    states: [
        State { name: "show"; PropertyChanges {target: iconBattery; opacity: 1.0}},
        State { name: "hide"; PropertyChanges {target: iconBattery; opacity: 0.0}}
    ]
    transitions: [
        Transition {
            from: "*"
            to: "*"
            NumberAnimation {
                properties: "opacity"
                duration: 600
                easing.type: Easing.InOutQuad
            }
        }
    ]
}

应用的触发逻辑如下:

static quint32 strToHash(const qchar *strArg) {
    return qsafe_hash(strArg, safe_strlen(strArg));
}
EventHandler *g_msgHandler = NULL;
static bool filterEvents(const QSafeEvent &event)
    {
    bool eventHandled = false;
    if (event.type() == EventSetVisibility) {
        QSafeEventVisibility visibility(event);
        if ((g_msgHandler) &&
                (visibility.id() == strToHash("iconBattery"))) {
            QSafeEventChangeState stateChange;
            stateChange.setId(visibility.id());
            if (visibility.getValue() == 1U) {
                stateChange.setName(strToHash("show"));
            } else {
                stateChange.setName(strToHash("hide"));
            }
            g_msgHandler->sendEvent(stateChange);
            eventHandled = true;
        }
    }
    return eventHandled;
}

int main(int argc, char **argv)
{
    static QSafeLayoutResourceReader layout("/layoutData/MainForm/MainForm.ui.srl");
    SafeWindow telltaleWindow(layout.size());
    static SafeRenderer::StateManager stateManager(telltaleWindow, layout);
    EventHandler msgHandler(stateManager, telltaleWindow);
    g_msgHandler = &msgHandler;
    msgHandler.installEventFilter(&filterEvents);
    msgHandler.handleEvents();
    return 0;
}

void EventHandler::stop() const

停止接收QSafeEvents。当应用必须停止时需要。

在某些Qt许可证下可用。
了解更多。