亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? qobject.cpp

?? QT 開發環境里面一個很重要的文件
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
/******************************************************************************** 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 "qobject.h"#include "qobject_p.h"#include "qabstracteventdispatcher.h"#include "qcoreapplication.h"#include "qcoreapplication_p.h"#include "qvariant.h"#include "qmetaobject.h"#include <qregexp.h>#include <qthread.h>#include <private/qthread_p.h>#include <qdebug.h>#include <qhash.h>#include <qpair.h>#include <qvarlengtharray.h>#include <qset.h>#include <new>#include <ctype.h>#include <limits.h>static int DIRECT_CONNECTION_ONLY = 0;Q_GLOBAL_STATIC(QReadWriteLock, qt_object_read_write_lock)QReadWriteLock *QObjectPrivate::readWriteLock() { return qt_object_read_write_lock(); }static int *queuedConnectionTypes(const QList<QByteArray> &typeNames){    int *types = static_cast<int *>(qMalloc((typeNames.count() + 1) * sizeof(int)));    for (int i = 0; i < typeNames.count(); ++i) {        const QByteArray typeName = typeNames.at(i);        if (typeName.endsWith('*'))            types[i] = QMetaType::VoidStar;        else            types[i] = QMetaType::type(typeName);        if (!types[i]) {            qWarning("QObject::connect: Cannot queue arguments of type '%s'\n"                     "(Make sure '%s' is registed using qRegisterMetaType().)",                     typeName.constData(), typeName.constData());            qFree(types);            return 0;        }    }    types[typeNames.count()] = 0;    return types;}struct QConnection {    QObject *sender;    int signal;    QObject *receiver;    int method;    uint refCount:30;    uint type:2; // 0 == auto, 1 == direct, 2 == queued    int *types;};Q_DECLARE_TYPEINFO(QConnection, Q_MOVABLE_TYPE);class QConnectionList{public:    QReadWriteLock lock;    typedef QMultiHash<const QObject *, int> Hash;    Hash sendersHash, receiversHash;    QList<int> unusedConnections;    typedef QList<QConnection> List;    List connections;    void remove(QObject *object);    void addConnection(QObject *sender, int signal,                       QObject *receiver, int method,                       int type = 0, int *types = 0);    bool removeConnection(QObject *sender, int signal,                          QObject *receiver, int method);};Q_GLOBAL_STATIC(QConnectionList, connectionList)/*! \internal    Removes \a object from the connection list completely, i.e. all    connections containing \a object are removed.*/void QConnectionList::remove(QObject *object){    for (int i = 0; i < 2; ++i) {        Hash &hash1 = i == 0 ? sendersHash : receiversHash;        Hash &hash2 = i == 0 ? receiversHash : sendersHash;        Hash::iterator it = hash1.find(object);        const Hash::iterator end = hash1.end();        while (it != end && it.key() == object) {            const int at = it.value();            QConnection &c = connections[at];            if (c.sender) {                if (c.types && c.types != &DIRECT_CONNECTION_ONLY) {                    qFree(c.types);                    c.types = 0;                }                it = hash1.erase(it);                const QObject * const partner = i == 0 ? c.receiver : c.sender;                Hash::iterator x = hash2.find(partner);                const Hash::iterator xend = hash2.end();                while (x != xend && x.key() == partner) {                    if (x.value() == at) {                        x = hash2.erase(x);                        break;                    } else {                        ++x;                    }                }                uint refCount = c.refCount;                memset(&c, 0, sizeof(c));                c.refCount = refCount;                Q_ASSERT(!unusedConnections.contains(at));                unusedConnections.prepend(at);            } else {                ++it;            }        }    }}/*! \internal    Adds the specified connection.*/void QConnectionList::addConnection(QObject *sender, int signal,                                    QObject *receiver, int method,                                    int type, int *types){    QConnection c = { sender, signal, receiver, method, 0, 0, types };    c.type = type; // don't warn on VC++6    int at = -1;    for (int i = 0; i < unusedConnections.size(); ++i) {        if (!connections.at(unusedConnections.at(i)).refCount) {            // reuse an unused connection            at = unusedConnections.takeAt(i);            connections[at] = c;            break;        }    }    if (at == -1) {        // append new connection        at = connections.size();        connections << c;    }    sendersHash.insert(sender, at);    receiversHash.insert(receiver, at);}/*! \internal    Removes the specified connection.  See QObject::disconnect() for    more information about valid arguments. */bool QConnectionList::removeConnection(QObject *sender, int signal,                                       QObject *receiver, int method){    bool success = false;    Hash::iterator it = sendersHash.find(sender);    while (it != sendersHash.end() && it.key() == sender) {        const int at = it.value();        QConnection &c = connections[at];        if (c.receiver            && (signal < 0 || signal == c.signal)            && (receiver == 0                || (c.receiver == receiver && (method < 0 || method == c.method)))) {            if (c.types) {                if (c.types != &DIRECT_CONNECTION_ONLY)                    qFree(c.types);                c.types = 0;            }            it = sendersHash.erase(it);            Hash::iterator x = receiversHash.find(c.receiver);            const Hash::iterator xend = receiversHash.end();            while (x != xend && x.key() == c.receiver) {                if (x.value() == at) {                    x = receiversHash.erase(x);                    break;                } else {                    ++x;                }            }            uint refCount = c.refCount;            memset(&c, 0, sizeof(c));            c.refCount = refCount;            unusedConnections << at;            success = true;        } else {            ++it;        }    }    return success;}/*  QObjectSet sets the minimum capacity to 4099 (the first prime number  after 4096), so that we can speed up QObject destruction. */class QObjectSet : public QSet<QObject *>{public:    QObjectSet()    { reserve(4099); }};Q_GLOBAL_STATIC(QObjectSet, allObjects)extern "C" Q_CORE_EXPORT void qt_addObject(QObject *object){    QWriteLocker locker(QObjectPrivate::readWriteLock());    QObjectSet *set = allObjects();    if (set)        set->insert(object);}extern "C" Q_CORE_EXPORT void qt_removeObject(QObject *object){    QObjectSet *set = allObjects();    if (set)        set->remove(object);}#ifdef Q_CC_MSVC#pragma warning(push)#pragma warning(disable:4190)#endifextern "C" Q_CORE_EXPORT QList<QObject *> qt_allTopLevelWidgets(){    QList<QObject *> list;    QReadLocker locker(QObjectPrivate::readWriteLock());    const QObjectSet *set = allObjects();    if (!set)        return list;    for (QSet<QObject *>::const_iterator it = set->constBegin(); it != set->constEnd(); ++it) {        if ((*it)->isWidgetType() && !(*it)->parent())            list << *it;    }    return list;}#ifdef Q_CC_MSVC#pragma warning(pop)#endifbool QObjectPrivate::isValidObject(QObject *object){    QObjectSet *set = allObjects();    return set ? set->contains(object) : false;}QObjectPrivate::QObjectPrivate(int version)    : threadData(0), currentSender(0), currentSenderSignalIdStart(-1), currentSenderSignalIdEnd(-1){    if (version != QObjectPrivateVersion)        qFatal("Cannot mix incompatible Qt libraries");    // QObjectData initialization    q_ptr = 0;    parent = 0;                                 // no parent yet. It is set by setParent()    isWidget = false;                           // assume not a widget object    pendTimer = false;                          // no timers yet    blockSig = false;                           // not blocking signals    wasDeleted = false;                         // double-delete catcher    sendChildEvents = true;                     // if we should send ChildInsert and ChildRemove events to parent    receiveChildEvents = true;    postedEvents = 0;#ifdef QT3_SUPPORT    postedChildInsertedEvents = 0;#endif    extraData = 0;}QObjectPrivate::~QObjectPrivate(){#ifndef QT_NO_USERDATA    if (extraData)        qDeleteAll(extraData->userData);    delete extraData;#endif}bool QObjectPrivate::isSender(const QObject *receiver, const char *signal) const{    Q_Q(const QObject);    int signal_index = q->metaObject()->indexOfSignal(signal);    if (signal_index < 0)        return false;    QConnectionList *list = ::connectionList();    QReadLocker locker(&list->lock);    QConnectionList::Hash::const_iterator it = list->sendersHash.constFind(q);    while (it != list->sendersHash.constEnd() && it.key() == q) {        const QConnection &c = list->connections.at(it.value());        if (c.signal == signal_index && c.receiver == receiver)            return true;        ++it;    }    return false;}QObjectList QObjectPrivate::receiverList(const char *signal) const{    Q_Q(const QObject);    QObjectList receivers;    int signal_index = q->metaObject()->indexOfSignal(signal);    if (signal_index < 0)        return receivers;    QConnectionList *list = ::connectionList();    QReadLocker locker(&list->lock);    QConnectionList::Hash::const_iterator it = list->sendersHash.constFind(q);    while (it != list->sendersHash.constEnd() && it.key() == q) {        const QConnection &c = list->connections.at(it.value());        if (c.signal == signal_index)            receivers << c.receiver;        ++it;    }    return receivers;}QObjectList QObjectPrivate::senderList() const{    Q_Q(const QObject);    QObjectList senders;    QConnectionList *list = ::connectionList();    QReadLocker locker(&list->lock);    QConnectionList::Hash::const_iterator it = list->receiversHash.constFind(q);    while (it != list->receiversHash.constEnd() && it.key() == q) {        const QConnection &c = list->connections.at(it.value());        senders << c.sender;        ++it;    }    return senders;}typedef QMultiHash<QObject *, QObject **> GuardHash;Q_GLOBAL_STATIC(GuardHash, guardHash)Q_GLOBAL_STATIC(QReadWriteLock, guardHashLock)/*!\internal */void QMetaObject::addGuard(QObject **ptr){    if (!*ptr)        return;    GuardHash *hash = guardHash();    if (!hash) {        *ptr = 0;        return;    }    QWriteLocker locker(guardHashLock());    hash->insert(*ptr, ptr);}/*!\internal */void QMetaObject::removeGuard(QObject **ptr){    if (!*ptr)        return;    GuardHash *hash = guardHash();    if (!hash)        return;    QWriteLocker locker(guardHashLock());    GuardHash::iterator it = hash->find(*ptr);    const GuardHash::iterator end = hash->end();    for (; it.key() == *ptr && it != end; ++it) {        if (it.value() == ptr) {            (void) hash->erase(it);            break;        }    }}/*!\internal */void QMetaObject::changeGuard(QObject **ptr, QObject *o){    GuardHash *hash = guardHash();    if (!hash) {        *ptr = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
5月丁香婷婷综合| 国产精品综合二区| 免费人成精品欧美精品| 欧美日韩美少妇| 亚洲国产日韩a在线播放| 在线观看亚洲精品| 亚洲一区二区在线观看视频| 在线中文字幕一区| 亚洲老妇xxxxxx| 在线观看国产91| 亚洲国产一区二区在线播放| 欧美在线观看一区| 亚洲成av人影院| 日韩一区二区在线观看视频| 美女一区二区久久| 久久无码av三级| 久久99精品一区二区三区 | 91精品国产91久久久久久最新毛片| 一区二区三区色| 99精品国产视频| 亚洲成av人片一区二区梦乃| 欧美一区二区大片| 国产一区二区三区四区五区入口 | 国产成人精品网址| 国产欧美精品一区二区色综合| 日韩电影在线观看电影| 日韩亚洲欧美综合| 国产盗摄精品一区二区三区在线| 亚洲国产精品成人综合| 国产一区二区三区观看| 国产精品久久99| 欧美探花视频资源| 美女久久久精品| 国产精品久久久久婷婷二区次| 一道本成人在线| 日本欧美肥老太交大片| 国产日韩欧美综合一区| 99精品久久只有精品| 亚洲国产视频一区| 久久日韩精品一区二区五区| 岛国精品在线播放| 午夜a成v人精品| 国产亚洲综合色| 99re亚洲国产精品| 婷婷六月综合亚洲| 欧美激情一区二区三区蜜桃视频| 91精品办公室少妇高潮对白| 亚洲欧美激情小说另类| 欧美大片在线观看一区| 91免费版在线| 老司机一区二区| 亚洲啪啪综合av一区二区三区| 欧美一区二区视频在线观看2020| 成人免费毛片aaaaa**| 石原莉奈在线亚洲三区| 精品国产伦一区二区三区观看方式 | 一区二区三区中文在线| xf在线a精品一区二区视频网站| 91免费观看国产| 国产在线国偷精品免费看| 亚洲国产成人av网| 欧美电影免费提供在线观看| 欧洲一区二区三区在线| 国产99久久久国产精品潘金| 午夜精品久久久久久久99樱桃| 亚洲国产精品精华液ab| 日韩三级.com| 色天使色偷偷av一区二区| 国产成人av一区二区| 视频在线观看91| 亚洲欧美日韩国产一区二区三区| 国产精品国产三级国产| 《视频一区视频二区| 亚洲天堂av老司机| 日韩理论片在线| 亚洲欧美aⅴ...| 亚洲精品日韩一| 一区二区三区在线观看视频| 一个色综合av| 婷婷综合在线观看| 蓝色福利精品导航| 国产美女精品人人做人人爽| 国产成人综合亚洲91猫咪| 国产成人一级电影| 不卡视频在线看| 91福利资源站| 制服丝袜av成人在线看| 日韩视频永久免费| 久久久久久亚洲综合影院红桃| 久久久777精品电影网影网| 国产欧美日韩精品在线| 亚洲人成精品久久久久久| 亚洲成av人片在线观看| 久久精品国产网站| 成人小视频在线| 欧美亚洲高清一区| 欧美精品 国产精品| 久久综合色天天久久综合图片| 国产欧美日韩另类视频免费观看| 自拍偷拍亚洲激情| 亚洲国产精品久久不卡毛片| 久久草av在线| 99久久久精品免费观看国产蜜| 91黄视频在线观看| 日韩精品一区在线观看| 国产精品美女久久久久久久久久久 | 波波电影院一区二区三区| 91亚洲资源网| 欧美一区二区三区视频在线观看 | 欧美激情在线一区二区三区| 亚洲欧美激情一区二区| 蜜臀av一级做a爰片久久| 成人午夜免费av| 欧美麻豆精品久久久久久| 国产亚洲一区二区在线观看| 亚洲精品国产a久久久久久| 久久精品噜噜噜成人av农村| 97久久人人超碰| 日韩欧美一级二级三级久久久| 国产精品久久久久久久久动漫| 日本午夜精品一区二区三区电影| av在线不卡免费看| 欧美一卡二卡在线观看| 亚洲猫色日本管| 国产综合久久久久影院| 欧美综合天天夜夜久久| 国产喂奶挤奶一区二区三区| 亚洲影院在线观看| 成人av电影在线播放| 欧美一区二区免费视频| 亚洲免费视频成人| 国产麻豆精品95视频| 欧美日韩国产一级二级| 中文字幕一区二区三区不卡在线 | 精品少妇一区二区| 一区二区三区国产豹纹内裤在线 | 久草在线在线精品观看| 欧美在线免费视屏| 国产精品久久久久天堂| 国产精品夜夜嗨| 欧美电视剧免费观看| 日韩国产欧美在线观看| 在线观看区一区二| 国产精品久久影院| 国产精品亚洲专一区二区三区| 日韩一区二区三区av| 亚洲福利一区二区| 91福利精品第一导航| 亚洲视频你懂的| www.性欧美| 国产亚洲女人久久久久毛片| 久久99精品视频| 日韩一级完整毛片| 日本sm残虐另类| 欧美一级一区二区| 首页欧美精品中文字幕| 欧美日韩mp4| 五月天欧美精品| 欧美日韩国产123区| 亚洲五月六月丁香激情| 日本高清不卡aⅴ免费网站| 亚洲欧美综合网| 91碰在线视频| 亚洲欧美视频一区| 色一情一伦一子一伦一区| 亚洲欧美一区二区久久 | 色爱区综合激月婷婷| 日韩一区中文字幕| 97精品国产97久久久久久久久久久久 | 波多野结衣在线一区| 亚洲国产成人自拍| av亚洲精华国产精华精华| 日韩一区中文字幕| 色噜噜狠狠色综合中国| 亚洲精品国产一区二区精华液 | 26uuu亚洲综合色| 国产精品资源在线看| 国产三级一区二区| 97久久精品人人做人人爽50路| 亚洲自拍偷拍图区| 91精品国产高清一区二区三区 | 欧美电视剧在线观看完整版| 久久99国产精品免费| 久久久亚洲综合| av综合在线播放| 一区二区三区在线观看国产| 欧美精品tushy高清| 久久精品国产成人一区二区三区| 久久先锋影音av鲁色资源| 成人精品视频一区二区三区| 玉足女爽爽91| 日韩欧美国产不卡| 成人午夜视频福利| 午夜精品久久一牛影视| 久久综合色天天久久综合图片| 成人av网址在线| 日韩精品一二区| 国产精品久久久久久久久快鸭| 欧美日韩色综合| 国产综合色在线|