QAbstractEventDispatcher 类

QAbstractEventDispatcher 类提供管理 Qt 事件队列的接口。 更多...

头: #include <QAbstractEventDispatcher>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
继承: QObject

公共类型

struct TimerInfo

公共函数

  QAbstractEventDispatcher (QObject * parent = nullptr)
virtual ~QAbstractEventDispatcher ()
bool filterNativeEvent (const QByteArray & eventType , void * message , qintptr * result )
void installNativeEventFilter (QAbstractNativeEventFilter * filterObj )
virtual void interrupt () = 0
virtual bool processEvents (QEventLoop::ProcessEventsFlags flags ) = 0
virtual void registerSocketNotifier (QSocketNotifier * notifier ) = 0
int registerTimer (qint64 interval , Qt::TimerType timerType , QObject * object )
virtual void registerTimer (int timerId , qint64 interval , Qt::TimerType timerType , QObject * object ) = 0
virtual QList<QAbstractEventDispatcher::TimerInfo> registeredTimers (QObject * object ) const = 0
virtual int remainingTime (int timerId ) = 0
void removeNativeEventFilter (QAbstractNativeEventFilter * filter )
virtual void unregisterSocketNotifier (QSocketNotifier * notifier ) = 0
virtual bool unregisterTimer (int timerId ) = 0
virtual bool unregisterTimers (QObject * object ) = 0
virtual void wakeUp () = 0

信号

void aboutToBlock ()
void awake ()

静态公共成员

QAbstractEventDispatcher * instance (QThread * thread = nullptr)

详细描述

事件分派程序接收来自窗口系统及其它来源的事件。然后将它们发送给 QCoreApplication or QApplication 实例,用于处理和交付。QAbstractEventDispatcher 提供事件交付的细粒度控制。

对于事件处理的简单控制,请使用 QCoreApplication::processEvents ().

为更好地控制应用程序的事件循环,调用 instance () 和调用返回 QAbstractEventDispatcher 对象的函数。若想要使用自己的 QAbstractEventDispatcher 实例或 QAbstractEventDispatcher 子类实例,必须安装它采用 QCoreApplication::setEventDispatcher () 或 QThread::setEventDispatcher () before 已安装默认事件分派程序。

启动 main 事件循环通过调用 QCoreApplication::exec (),和停止通过调用 QCoreApplication::exit ()。本地事件循环可以被创建使用 QEventLoop .

履行长时间操作的程序可以调用 processEvents () 采用按位 OR 组合各种 QEventLoop::ProcessEventsFlag 值去控制应该交付哪些事件。

QAbstractEventDispatcher 还允许集成外部事件循环与 Qt 事件循环。

另请参阅 QEventLoop , QCoreApplication ,和 QThread .

成员函数文档编制

QAbstractEventDispatcher:: QAbstractEventDispatcher ( QObject * parent = nullptr)

构造新事件分派程序采用给定 parent .

[signal] void QAbstractEventDispatcher:: aboutToBlock ()

此信号被发射在事件循环调用可能阻塞的函数之前。

另请参阅 awake ().

[signal] void QAbstractEventDispatcher:: awake ()

此信号发射,在事件循环从可能阻塞的函数返回后。

另请参阅 wakeUp () 和 aboutToBlock ().

[虚拟] QAbstractEventDispatcher:: ~QAbstractEventDispatcher ()

销毁事件分派程序。

[since 5.0] bool QAbstractEventDispatcher:: filterNativeEvent (const QByteArray & eventType , void * message , qintptr * result )

发送 message 透过事件过滤器设置通过 installNativeEventFilter ()。此函数返回 true as soon as an event filter returns true , and false otherwise to indicate that the processing of the event should continue.

子类化的 QAbstractEventDispatcher must call this function for all messages received from the system to ensure compatibility with any extensions that may be used in the application. The type of event eventType is specific to the platform plugin chosen at run-time, and can be used to cast message to the right type. The result pointer is only used on Windows, and corresponds to the LRESULT pointer.

Note that the type of message is platform dependent. See QAbstractNativeEventFilter 了解细节。

该函数在 Qt 5.0 引入。

另请参阅 installNativeEventFilter () 和 QAbstractNativeEventFilter::nativeEventFilter ().

[since 5.0] void QAbstractEventDispatcher:: installNativeEventFilter ( QAbstractNativeEventFilter * filterObj )

安装事件过滤器 filterObj 对于应用程序收到的所有本机事件。

事件过滤器 filterObj 接收事件凭借其 nativeEventFilter() function, which is called for all events received by all threads.

nativeEventFilter() function should return true if the event should be filtered, (in this case, stopped). It should return false to allow normal Qt processing to continue: the native event can then be translated into a QEvent 并处理通过标准 Qt event 过滤,如 QObject::installEventFilter ().

若安装了多个事件过滤器,则首先激活最后安装的过滤器。

注意: The filter function set here receives native messages, that is, MSG or XEvent structs.

为获得最大可移植性,应始终试着使用 QEvent objects and QObject::installEventFilter () 每当可能时。

该函数在 Qt 5.0 引入。

另请参阅 QObject::installEventFilter ().

[static] QAbstractEventDispatcher *QAbstractEventDispatcher:: instance ( QThread * thread = nullptr)

Returns a pointer to the event dispatcher object for the specified thread 。若 thread is nullptr , the current thread is used. If no event dispatcher exists for the specified thread, this function returns nullptr .

注意: If Qt is built without thread support, the thread argument is ignored.

[pure virtual] void QAbstractEventDispatcher:: interrupt ()

Interrupts event dispatching. The event dispatcher will return from processEvents () 尽快。

[pure virtual] bool QAbstractEventDispatcher:: processEvents ( QEventLoop::ProcessEventsFlags flags )

处理待决事件匹配 flags 直到没有更多要处理事件为止。返回 true if an event was processed; otherwise returns false .

This function is especially useful if you have a long running operation, and want to show its progress without allowing user input by using the QEventLoop::ExcludeUserInputEvents 标志。

QEventLoop::WaitForMoreEvents flag is set in flags , the behavior of this function is as follows:

  • 若事件可用,此函数在处理它们后返回。
  • If no events are available, this function will wait until more are available and return after processing newly available events.

QEventLoop::WaitForMoreEvents flag is not set in flags , and no events are available, this function will return immediately.

注意: 此函数不连续处理事件;它返回在处理所有可用事件之后。

[pure virtual] void QAbstractEventDispatcher:: registerSocketNotifier ( QSocketNotifier * notifier )

注册 notifier with the event loop. Subclasses must implement this method to tie a socket notifier into another event loop.

int QAbstractEventDispatcher:: registerTimer ( qint64 interval , Qt::TimerType timerType , QObject * object )

Registers a timer with the specified interval and timerType 为给定 object and returns the timer id.

[pure virtual] void QAbstractEventDispatcher:: registerTimer ( int timerId , qint64 interval , Qt::TimerType timerType , QObject * object )

注册计时器采用指定 timerId , interval ,和 timerType 为给定 object .

[pure virtual] QList < QAbstractEventDispatcher::TimerInfo > QAbstractEventDispatcher:: registeredTimers ( QObject * object ) const

返回注册计时器列表为 object TimerInfo 结构拥有 timerId , interval ,和 timerType 成员。

另请参阅 Qt::TimerType .

[pure virtual] int QAbstractEventDispatcher:: remainingTime ( int timerId )

Returns the remaining time in milliseconds with the given timerId . If the timer is inactive, the returned value will be -1. If the timer is overdue, the returned value will be 0.

另请参阅 Qt::TimerType .

[since 5.0] void QAbstractEventDispatcher:: removeNativeEventFilter ( QAbstractNativeEventFilter * filter )

Removes the event filter filter 从此对象。忽略请求,若尚未安装这种事件过滤器。

将自动移除此对象的所有事件过滤器,当此对象被销毁时。

It is always safe to remove an event filter, even during event filter filter activation (that is, even from within the nativeEventFilter() 函数)。

该函数在 Qt 5.0 引入。

另请参阅 installNativeEventFilter () 和 QAbstractNativeEventFilter .

[pure virtual] void QAbstractEventDispatcher:: unregisterSocketNotifier ( QSocketNotifier * notifier )

Unregisters notifier from the event dispatcher. Subclasses must reimplement this method to tie a socket notifier into another event loop. Reimplementations must call the base implementation.

[pure virtual] bool QAbstractEventDispatcher:: unregisterTimer ( int timerId )

Unregisters the timer with the given timerId 。返回 true 若成功;否则返回 false .

另请参阅 registerTimer () 和 unregisterTimers ().

[pure virtual] bool QAbstractEventDispatcher:: unregisterTimers ( QObject * object )

Unregisters all the timers associated with the given object 。返回 true if all timers were successful removed; otherwise returns false .

另请参阅 unregisterTimer () 和 registeredTimers ().

[pure virtual] void QAbstractEventDispatcher:: wakeUp ()

唤醒事件循环。

注意: 此函数是 thread-safe .

另请参阅 awake ().