?? qwineventnotifier_p.cpp
字號:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the QtCore module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file. Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "qwineventnotifier_p.h"#include "qeventdispatcher_win_p.h"#include "qcoreapplication.h"#include <private/qthread_p.h>/* \class QWinEventNotifier qwineventnotifier.h \brief The QWinEventNotifier class provides support for the Windows Wait functions. \ingroup io The QWinEventNotifier class makes it possible to use the wait functions on windows in a asynchronous manner. With this class you can register a HANDLE to an event and get notification when that event becomes signalled. The state of the event is not modified in the process so if it is a manual reset event you will need to reset it after the notification.*/QWinEventNotifier::QWinEventNotifier(QObject *parent) : QObject(parent), handleToEvent(0), enabled(false){}QWinEventNotifier::QWinEventNotifier(HANDLE hEvent, QObject *parent) : QObject(parent), handleToEvent(hEvent), enabled(false){ Q_D(QObject); QEventDispatcherWin32 *eventDispatcher = qobject_cast<QEventDispatcherWin32 *>(d->threadData->eventDispatcher); Q_ASSERT_X(eventDispatcher, "QWinEventNotifier::QWinEventNotifier()", "Cannot create a win event notifier without a QEventDispatcherWin32"); eventDispatcher->registerEventNotifier(this); enabled = true;}QWinEventNotifier::~QWinEventNotifier(){ setEnabled(false);}void QWinEventNotifier::setHandle(HANDLE hEvent){ setEnabled(false); handleToEvent = hEvent;}HANDLE QWinEventNotifier::handle() const{ return handleToEvent;}bool QWinEventNotifier::isEnabled() const{ return enabled;}void QWinEventNotifier::setEnabled(bool enable){ if (enabled == enable) // no change return; enabled = enable; Q_D(QObject); QEventDispatcherWin32 *eventDispatcher = qobject_cast<QEventDispatcherWin32 *>(d->threadData->eventDispatcher); if (!eventDispatcher) // perhaps application is shutting down return; if (enabled) eventDispatcher->registerEventNotifier(this); else eventDispatcher->unregisterEventNotifier(this);}bool QWinEventNotifier::event(QEvent * e){ if (e->type() == QEvent::ThreadChange) { if (enabled) { QMetaObject::invokeMethod(this, "setEnabled", Qt::QueuedConnection, Q_ARG(bool, enabled)); setEnabled(false); } } QObject::event(e); // will activate filters if (e->type() == QEvent::WinEventAct) { emit activated(handleToEvent); return true; } return false;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -