Remove QPlatformEventLoopIntegration.
Instead we'll let the platform plugins construct an QEventDispatcherQPA subclass. This API will be added later on. This temporarily breaks cocoa, uikit and opencode.
This commit is contained in:
parent
d88a773218
commit
0a4c2eae4b
@ -49,7 +49,6 @@ qpa {
|
||||
kernel/qplatformwindow_qpa.h \
|
||||
kernel/qplatformglcontext_qpa.h \
|
||||
kernel/qwindowcontext_qpa.h \
|
||||
kernel/qplatformeventloopintegration_qpa.h \
|
||||
kernel/qplatformcursor_qpa.h \
|
||||
kernel/qplatformclipboard_qpa.h \
|
||||
kernel/qplatformnativeinterface_qpa.h \
|
||||
@ -71,7 +70,6 @@ qpa {
|
||||
kernel/qplatformintegrationfactory_qpa.cpp \
|
||||
kernel/qplatformintegrationplugin_qpa.cpp \
|
||||
kernel/qplatformwindow_qpa.cpp \
|
||||
kernel/qplatformeventloopintegration_qpa.cpp \
|
||||
kernel/qplatformglcontext_qpa.cpp \
|
||||
kernel/qwindowcontext_qpa.cpp \
|
||||
kernel/qplatformcursor_qpa.cpp \
|
||||
|
@ -130,17 +130,4 @@ QPAEventDispatcherGlib::~QPAEventDispatcherGlib()
|
||||
d->userEventSource = 0;
|
||||
}
|
||||
|
||||
bool QPAEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags)
|
||||
{
|
||||
static bool init = false;
|
||||
if (!init) {
|
||||
if (QGuiApplicationPrivate::platformIntegration()->createEventLoopIntegration()) {
|
||||
qWarning("Eventloop integration is not supported by the glib event dispatcher");
|
||||
qWarning("Use the UNIX event dispatcher by defining environment variable QT_NO_GLIB=1");
|
||||
}
|
||||
init = true;
|
||||
}
|
||||
return QEventDispatcherGlib::processEvents(flags);
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -68,8 +68,6 @@ class QPAEventDispatcherGlib : public QEventDispatcherGlib
|
||||
public:
|
||||
explicit QPAEventDispatcherGlib(QObject *parent = 0);
|
||||
~QPAEventDispatcherGlib();
|
||||
|
||||
bool processEvents(QEventLoop::ProcessEventsFlags flags);
|
||||
};
|
||||
|
||||
struct GUserEventSource;
|
||||
|
@ -43,7 +43,6 @@
|
||||
#include "qcoreapplication.h"
|
||||
#include "qeventdispatcher_qpa_p.h"
|
||||
#include "private/qguiapplication_p.h"
|
||||
#include "qplatformeventloopintegration_qpa.h"
|
||||
|
||||
#include <QWindowSystemInterface>
|
||||
#include <QtCore/QElapsedTimer>
|
||||
@ -58,142 +57,25 @@ QT_BEGIN_NAMESPACE
|
||||
|
||||
QT_USE_NAMESPACE
|
||||
|
||||
class Rendezvous
|
||||
QEventDispatcherQPAPrivate::QEventDispatcherQPAPrivate()
|
||||
{
|
||||
public:
|
||||
void checkpoint()
|
||||
{
|
||||
if (state.testAndSetOrdered(0,1)) {
|
||||
semaphore.acquire();
|
||||
} else if (state.testAndSetAcquire(1,0)) {
|
||||
semaphore.release();
|
||||
} else {
|
||||
qWarning("Barrier internal error");
|
||||
}
|
||||
}
|
||||
private:
|
||||
QSemaphore semaphore;
|
||||
QAtomicInt state;
|
||||
};
|
||||
|
||||
class SelectWorker : public QThread
|
||||
}
|
||||
|
||||
QEventDispatcherQPAPrivate::~QEventDispatcherQPAPrivate()
|
||||
{
|
||||
public:
|
||||
SelectWorker(QEventDispatcherQPAPrivate *eventDispatcherPrivate)
|
||||
: QThread(),
|
||||
m_edPrivate(eventDispatcherPrivate),
|
||||
m_retVal(0)
|
||||
{
|
||||
}
|
||||
|
||||
void setSelectValues(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds)
|
||||
{
|
||||
m_nfds = nfds;
|
||||
m_readfds = readfds;
|
||||
m_writefds = writefds;
|
||||
m_exceptfds = exceptfds;
|
||||
|
||||
|
||||
}
|
||||
|
||||
int retVal() const {
|
||||
return m_retVal;
|
||||
}
|
||||
|
||||
protected:
|
||||
void run();
|
||||
|
||||
private:
|
||||
QEventDispatcherQPAPrivate *m_edPrivate;
|
||||
int m_retVal;
|
||||
|
||||
int m_nfds;
|
||||
fd_set *m_readfds, *m_writefds, *m_exceptfds;
|
||||
};
|
||||
|
||||
class QEventDispatcherQPAPrivate : public EVENTDISPATCHERBASEPRIVATE
|
||||
{
|
||||
Q_DECLARE_PUBLIC(QEventDispatcherQPA)
|
||||
public:
|
||||
QEventDispatcherQPAPrivate()
|
||||
: eventLoopIntegration(0),
|
||||
barrierBeforeBlocking(0),
|
||||
barrierReturnValue(0),
|
||||
selectReturnMutex(0),
|
||||
selectWorkerNeedsSync(true),
|
||||
selectWorkerHasResult(false),
|
||||
m_integrationInitialised(false),
|
||||
m_hasIntegration(false),
|
||||
m_isEventLoopIntegrationRunning(false)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
~QEventDispatcherQPAPrivate()
|
||||
{
|
||||
delete selectWorker;
|
||||
delete eventLoopIntegration;
|
||||
delete barrierBeforeBlocking;
|
||||
delete barrierReturnValue;
|
||||
delete selectReturnMutex;
|
||||
}
|
||||
|
||||
bool hasIntegration() const
|
||||
{
|
||||
if (!m_integrationInitialised) {
|
||||
QEventDispatcherQPAPrivate *that = const_cast<QEventDispatcherQPAPrivate *>(this);
|
||||
if (qApp && (qApp->thread() == QThread::currentThread())) { // guiThread
|
||||
if (QGuiApplicationPrivate::platformIntegration()) {
|
||||
that->eventLoopIntegration = QGuiApplicationPrivate::platformIntegration()->createEventLoopIntegration();
|
||||
if (that->eventLoopIntegration) {
|
||||
that->selectWorker = new SelectWorker(that);
|
||||
that->barrierBeforeBlocking = new Rendezvous;
|
||||
that->barrierReturnValue = new Rendezvous;
|
||||
that->selectReturnMutex = new QMutex;
|
||||
that->selectWorker->start();
|
||||
that->m_hasIntegration = true;
|
||||
if (!QElapsedTimer::isMonotonic())
|
||||
qWarning("Having eventloop integration without monotonic timers can lead to undefined behaviour");
|
||||
}
|
||||
}
|
||||
}
|
||||
that->m_integrationInitialised = true;
|
||||
}
|
||||
return m_hasIntegration;
|
||||
}
|
||||
|
||||
bool isEventLoopIntegrationRunning() const
|
||||
{
|
||||
return m_isEventLoopIntegrationRunning;
|
||||
}
|
||||
|
||||
void runEventLoopIntegration()
|
||||
{
|
||||
if (qApp && (qApp->thread() == QThread::currentThread())) {
|
||||
m_isEventLoopIntegrationRunning = true;
|
||||
eventLoopIntegration->startEventLoop();
|
||||
}
|
||||
}
|
||||
|
||||
QPlatformEventLoopIntegration *eventLoopIntegration;
|
||||
Rendezvous *barrierBeforeBlocking;
|
||||
Rendezvous *barrierReturnValue;
|
||||
|
||||
QMutex *selectReturnMutex;
|
||||
bool selectWorkerNeedsSync;
|
||||
bool selectWorkerHasResult;
|
||||
|
||||
SelectWorker *selectWorker;
|
||||
private:
|
||||
bool m_integrationInitialised;
|
||||
bool m_hasIntegration;
|
||||
bool m_isEventLoopIntegrationRunning;
|
||||
};
|
||||
}
|
||||
|
||||
QEventDispatcherQPA::QEventDispatcherQPA(QObject *parent)
|
||||
: EVENTDISPATCHERBASE(*new QEventDispatcherQPAPrivate, parent)
|
||||
{ }
|
||||
|
||||
QEventDispatcherQPA::QEventDispatcherQPA(QEventDispatcherUNIXPrivate &priv, QObject *parent)
|
||||
: EVENTDISPATCHERBASE(priv, parent)
|
||||
{ }
|
||||
|
||||
|
||||
QEventDispatcherQPA::~QEventDispatcherQPA()
|
||||
{ }
|
||||
|
||||
@ -201,16 +83,6 @@ bool QEventDispatcherQPA::processEvents(QEventLoop::ProcessEventsFlags flags)
|
||||
{
|
||||
Q_D(QEventDispatcherQPA);
|
||||
|
||||
if (d->hasIntegration()) {
|
||||
if (!d->isEventLoopIntegrationRunning()) {
|
||||
d->runEventLoopIntegration();
|
||||
}
|
||||
if (d->threadData->quitNow) {
|
||||
d->eventLoopIntegration->quitEventLoop();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
int nevents = 0;
|
||||
|
||||
// handle gui and posted events
|
||||
@ -254,89 +126,10 @@ bool QEventDispatcherQPA::hasPendingEvents()
|
||||
return qGlobalPostedEventsCount() || QWindowSystemInterfacePrivate::windowSystemEventsQueued();
|
||||
}
|
||||
|
||||
void QEventDispatcherQPA::registerSocketNotifier(QSocketNotifier *notifier)
|
||||
{
|
||||
Q_D(QEventDispatcherQPA);
|
||||
EVENTDISPATCHERBASE::registerSocketNotifier(notifier);
|
||||
if (d->hasIntegration())
|
||||
wakeUp();
|
||||
|
||||
}
|
||||
|
||||
void QEventDispatcherQPA::unregisterSocketNotifier(QSocketNotifier *notifier)
|
||||
{
|
||||
Q_D(QEventDispatcherQPA);
|
||||
EVENTDISPATCHERBASE::unregisterSocketNotifier(notifier);
|
||||
if (d->hasIntegration())
|
||||
wakeUp();
|
||||
}
|
||||
|
||||
void QEventDispatcherQPA::flush()
|
||||
{
|
||||
if(qApp)
|
||||
qApp->sendPostedEvents();
|
||||
}
|
||||
|
||||
int QEventDispatcherQPA::select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
||||
timeval *timeout)
|
||||
{
|
||||
Q_D(QEventDispatcherQPA);
|
||||
int retVal = 0;
|
||||
if (d->hasIntegration()) {
|
||||
qint64 timeoutmsec = 0;
|
||||
if (timeout)
|
||||
timeoutmsec = timeout->tv_sec * 1000 + (timeout->tv_usec/1000);
|
||||
d->selectReturnMutex->lock();
|
||||
if (d->selectWorkerNeedsSync) {
|
||||
if (d->selectWorkerHasResult) {
|
||||
retVal = d->selectWorker->retVal();
|
||||
d->selectWorkerHasResult = false;
|
||||
|
||||
d->selectReturnMutex->unlock();
|
||||
d->barrierReturnValue->checkpoint();
|
||||
d->eventLoopIntegration->setNextTimerEvent(0);
|
||||
return retVal;
|
||||
} else {
|
||||
d->selectWorkerNeedsSync = false;
|
||||
d->selectWorker->setSelectValues(nfds,readfds, writefds, exceptfds);
|
||||
d->barrierBeforeBlocking->checkpoint();
|
||||
}
|
||||
}
|
||||
d->selectReturnMutex->unlock();
|
||||
d->eventLoopIntegration->setNextTimerEvent(timeoutmsec);
|
||||
retVal = 0; //is 0 if select has not returned
|
||||
} else {
|
||||
#if defined(Q_OS_UNIX)
|
||||
retVal = EVENTDISPATCHERBASE::select(nfds, readfds, writefds, exceptfds, timeout);
|
||||
#elif defined(Q_OS_WIN)
|
||||
// ### TODO
|
||||
#endif
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
|
||||
void SelectWorker::run()
|
||||
{
|
||||
|
||||
while(true) {
|
||||
m_retVal = 0;
|
||||
m_edPrivate->barrierBeforeBlocking->checkpoint(); // wait for mainthread
|
||||
#if defined(Q_OS_UNIX)
|
||||
int tmpRet = qt_safe_select(m_nfds,m_readfds,m_writefds,m_exceptfds,0);
|
||||
#elif defined(Q_OS_WIN)
|
||||
// ### TODO
|
||||
int tmpRet = 0;
|
||||
#endif
|
||||
m_edPrivate->selectReturnMutex->lock();
|
||||
m_edPrivate->eventLoopIntegration->qtNeedsToProcessEvents();
|
||||
|
||||
m_edPrivate->selectWorkerNeedsSync = true;
|
||||
m_edPrivate->selectWorkerHasResult = true;
|
||||
m_retVal = tmpRet;
|
||||
|
||||
m_edPrivate->selectReturnMutex->unlock();
|
||||
m_edPrivate->barrierReturnValue->checkpoint();
|
||||
}
|
||||
}
|
||||
QT_END_NAMESPACE
|
||||
|
@ -75,19 +75,21 @@ class QEventDispatcherQPA : public EVENTDISPATCHERBASE
|
||||
|
||||
public:
|
||||
explicit QEventDispatcherQPA(QObject *parent = 0);
|
||||
QEventDispatcherQPA(QEventDispatcherUNIXPrivate &priv, QObject *parent);
|
||||
~QEventDispatcherQPA();
|
||||
|
||||
bool processEvents(QEventLoop::ProcessEventsFlags flags);
|
||||
bool hasPendingEvents();
|
||||
|
||||
void registerSocketNotifier(QSocketNotifier *notifier);
|
||||
void unregisterSocketNotifier(QSocketNotifier *notifier);
|
||||
|
||||
void flush();
|
||||
};
|
||||
|
||||
protected:
|
||||
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
||||
timeval *timeout);
|
||||
class QEventDispatcherQPAPrivate : public EVENTDISPATCHERBASEPRIVATE
|
||||
{
|
||||
Q_DECLARE_PUBLIC(QEventDispatcherQPA)
|
||||
public:
|
||||
QEventDispatcherQPAPrivate();
|
||||
~QEventDispatcherQPAPrivate();
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -1,86 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the QtGui module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** This file may be used under the terms of the GNU Lesser General Public
|
||||
** License version 2.1 as published by the Free Software Foundation and
|
||||
** appearing in the file LICENSE.LGPL included in the packaging of this
|
||||
** file. Please review the following information to ensure the GNU Lesser
|
||||
** General Public License version 2.1 requirements will be met:
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU General
|
||||
** Public License version 3.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 the GNU General
|
||||
** Public License version 3.0 requirements will be met:
|
||||
** http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qplatformeventloopintegration_qpa.h"
|
||||
|
||||
#include <QtCore/QCoreApplication>
|
||||
|
||||
#include <QtCore/QDebug>
|
||||
|
||||
class QPlatformEventLoopIntegrationPrivate
|
||||
{
|
||||
public:
|
||||
QPlatformEventLoopIntegrationPrivate();
|
||||
qint64 nextTimerEvent;
|
||||
};
|
||||
|
||||
QPlatformEventLoopIntegrationPrivate::QPlatformEventLoopIntegrationPrivate()
|
||||
: nextTimerEvent(0)
|
||||
{
|
||||
}
|
||||
|
||||
QPlatformEventLoopIntegration::QPlatformEventLoopIntegration()
|
||||
: d_ptr(new QPlatformEventLoopIntegrationPrivate)
|
||||
|
||||
{
|
||||
}
|
||||
|
||||
QPlatformEventLoopIntegration::~QPlatformEventLoopIntegration()
|
||||
{
|
||||
}
|
||||
|
||||
qint64 QPlatformEventLoopIntegration::nextTimerEvent() const
|
||||
{
|
||||
Q_D(const QPlatformEventLoopIntegration);
|
||||
return d->nextTimerEvent;
|
||||
}
|
||||
|
||||
|
||||
void QPlatformEventLoopIntegration::setNextTimerEvent(qint64 nextTimerEvent)
|
||||
{
|
||||
Q_D(QPlatformEventLoopIntegration);
|
||||
d->nextTimerEvent = nextTimerEvent;
|
||||
}
|
||||
|
||||
void QPlatformEventLoopIntegration::processEvents()
|
||||
{
|
||||
QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents);
|
||||
}
|
@ -1,82 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the QtGui module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** GNU Lesser General Public License Usage
|
||||
** This file may be used under the terms of the GNU Lesser General Public
|
||||
** License version 2.1 as published by the Free Software Foundation and
|
||||
** appearing in the file LICENSE.LGPL included in the packaging of this
|
||||
** file. Please review the following information to ensure the GNU Lesser
|
||||
** General Public License version 2.1 requirements will be met:
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU General
|
||||
** Public License version 3.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 the GNU General
|
||||
** Public License version 3.0 requirements will be met:
|
||||
** http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms and
|
||||
** conditions contained in a signed written agreement between you and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QPLATFORMEVENTLOOPINTEGRATION_QPA_H
|
||||
#define QPLATFORMEVENTLOOPINTEGRATION_QPA_H
|
||||
|
||||
#include <QtCore/qglobal.h>
|
||||
#include <QtCore/QScopedPointer>
|
||||
|
||||
QT_BEGIN_HEADER
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QT_MODULE(Gui)
|
||||
|
||||
class QPlatformEventLoopIntegrationPrivate;
|
||||
|
||||
class Q_GUI_EXPORT QPlatformEventLoopIntegration
|
||||
{
|
||||
Q_DECLARE_PRIVATE(QPlatformEventLoopIntegration);
|
||||
public:
|
||||
QPlatformEventLoopIntegration();
|
||||
virtual ~QPlatformEventLoopIntegration();
|
||||
|
||||
virtual void startEventLoop() = 0;
|
||||
virtual void quitEventLoop() = 0;
|
||||
virtual void qtNeedsToProcessEvents() = 0;
|
||||
|
||||
qint64 nextTimerEvent() const;
|
||||
void setNextTimerEvent(qint64 nextTimerEvent);
|
||||
|
||||
static void processEvents();
|
||||
protected:
|
||||
QScopedPointer<QPlatformEventLoopIntegrationPrivate> d_ptr;
|
||||
private:
|
||||
Q_DISABLE_COPY(QPlatformEventLoopIntegration);
|
||||
friend class QEventDispatcherQPA;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
QT_END_HEADER
|
||||
|
||||
#endif // QPLATFORMEVENTLOOPINTEGRATION_QPA_H
|
@ -58,17 +58,6 @@ QPixmap QPlatformIntegration::grabWindow(WId window, int x, int y, int width, in
|
||||
return QPixmap();
|
||||
}
|
||||
|
||||
/*!
|
||||
Factory function for the eventloop integration interface.
|
||||
|
||||
Default implementation returns 0, which causes the eventloop to run in a single thread mode.
|
||||
|
||||
\sa QPlatformEventLoopIntegration
|
||||
*/
|
||||
QPlatformEventLoopIntegration *QPlatformIntegration::createEventLoopIntegration() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
Accessor for the platform integrations fontdatabase.
|
||||
|
@ -56,7 +56,6 @@ QT_MODULE(Gui)
|
||||
class QPlatformWindow;
|
||||
class QWindow;
|
||||
class QBlittable;
|
||||
class QPlatformEventLoopIntegration;
|
||||
class QPlatformFontDatabase;
|
||||
class QPlatformClipboard;
|
||||
class QPlatformNativeInterface;
|
||||
@ -95,11 +94,6 @@ public:
|
||||
virtual QPlatformDrag *drag() const;
|
||||
#endif
|
||||
|
||||
// Experimental in mainthread eventloop integration
|
||||
// This should only be used if it is only possible to do window system event processing in
|
||||
// the gui thread. All of the functions in QWindowSystemInterface are thread safe.
|
||||
virtual QPlatformEventLoopIntegration *createEventLoopIntegration() const;
|
||||
|
||||
// Access native handles. The window handle is already available from Wid;
|
||||
virtual QPlatformNativeInterface *nativeInterface() const;
|
||||
|
||||
|
@ -823,7 +823,6 @@ QT_CLASS_LIB(QColorGroup, QtWidgets, qpalette.h)
|
||||
QT_CLASS_LIB(QPlatformCursorImage, QtGui, qplatformcursor_qpa.h)
|
||||
QT_CLASS_LIB(QPlatformCursorPrivate, QtGui, qplatformcursor_qpa.h)
|
||||
QT_CLASS_LIB(QPlatformCursor, QtGui, qplatformcursor_qpa.h)
|
||||
QT_CLASS_LIB(QPlatformEventLoopIntegration, QtGui, qplatformeventloopintegration_qpa.h)
|
||||
QT_CLASS_LIB(QPlatformGLContext, QtGui, qplatformglcontext_qpa.h)
|
||||
QT_CLASS_LIB(QPlatformIntegration, QtGui, qplatformintegration_qpa.h)
|
||||
QT_CLASS_LIB(QPlatformIntegrationFactoryInterface, QtGui, qplatformintegrationplugin_qpa.h)
|
||||
|
Loading…
Reference in New Issue
Block a user