⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qaccessiblewidget.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        break;    case Child:        if (complexWidget) {            if (entry > 0 && entry <= childCount())                return entry;            return -1;        }else {            if (entry > 0 && childList.size() >= entry)                targetObject = childList.at(entry - 1);        }        break;    case Ancestor:        {            if (entry <= 0)                return -1;            targetObject = widget()->parentWidget();            int i;            for (i = entry; i > 1 && targetObject; --i)                targetObject = targetObject->parent();            if (!targetObject && i == 1)                targetObject = qApp;        }        break;    case Sibling:        {            QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(parentObject());            if (!iface)                return -1;            iface->navigate(Child, entry, target);            delete iface;            if (*target)                return 0;        }        break;    // Geometrical    case QAccessible::Left:        if (complexWidget && entry) {            if (entry < 2 || widget()->height() > widget()->width() + 20) // looks vertical                return -1;            return entry - 1;        }        // fall through    case QAccessible::Right:        if (complexWidget && entry) {            if (entry >= childCount() || widget()->height() > widget()->width() + 20) // looks vertical                return -1;            return entry + 1;        }        // fall through    case QAccessible::Up:        if (complexWidget && entry) {            if (entry < 2 || widget()->width() > widget()->height() + 20) // looks horizontal                return - 1;            return entry - 1;        }        // fall through    case QAccessible::Down:        if (complexWidget && entry) {            if (entry >= childCount() || widget()->width() > widget()->height()  + 20) // looks horizontal                return - 1;            return entry + 1;        } else {            QAccessibleInterface *pIface = QAccessible::queryAccessibleInterface(parentObject());            if (!pIface)                return -1;            QRect startg = rect(0);            QPoint startc = startg.center();            QAccessibleInterface *candidate = 0;            int mindist = 100000;            int sibCount = pIface->childCount();            for (int i = 0; i < sibCount; ++i) {                QAccessibleInterface *sibling = 0;                pIface->navigate(Child, i+1, &sibling);                Q_ASSERT(sibling);                if ((relationTo(0, sibling, 0) & Self) || (sibling->state(0) & QAccessible::Invisible)) {                    //ignore ourself and invisible siblings                    delete sibling;                    continue;                }                QRect sibg = sibling->rect(0);                QPoint sibc = sibg.center();                QPoint sibp;                QPoint startp;                QPoint distp;                switch (relation) {                case QAccessible::Left:                    startp = QPoint(startg.left(), startg.top() + startg.height() / 2);                    sibp = QPoint(sibg.right(), sibg.top() + sibg.height() / 2);                    if (QPoint(sibc - startc).x() >= 0) {                        delete sibling;                        continue;                    }                    distp = sibp - startp;                    break;                case QAccessible::Right:                    startp = QPoint(startg.right(), startg.top() + startg.height() / 2);                    sibp = QPoint(sibg.left(), sibg.top() + sibg.height() / 2);                    if (QPoint(sibc - startc).x() <= 0) {                        delete sibling;                        continue;                    }                    distp = sibp - startp;                    break;                case QAccessible::Up:                    startp = QPoint(startg.left() + startg.width() / 2, startg.top());                    sibp = QPoint(sibg.left() + sibg.width() / 2, sibg.bottom());                    if (QPoint(sibc - startc).y() >= 0) {                        delete sibling;                        continue;                    }                    distp = sibp - startp;                    break;                case QAccessible::Down:                    startp = QPoint(startg.left() + startg.width() / 2, startg.bottom());                    sibp = QPoint(sibg.left() + sibg.width() / 2, sibg.top());                    if (QPoint(sibc - startc).y() <= 0) {                        delete sibling;                        continue;                    }                    distp = sibp - startp;                    break;		default:		    break;                }                int dist = (int)sqrt((double)distp.x() * distp.x() + distp.y() * distp.y());                if (dist < mindist) {                    delete candidate;                    candidate = sibling;                    mindist = dist;                } else {                    delete sibling;                }            }            delete pIface;            *target = candidate;            if (*target)                return 0;        }        break;    case Covers:        if (entry > 0) {            QAccessibleInterface *pIface = QAccessible::queryAccessibleInterface(parentObject());            if (!pIface)                return -1;            QRect r = rect(0);            int sibCount = pIface->childCount();            QAccessibleInterface *sibling = 0;            for (int i = pIface->indexOfChild(this) + 1; i <= sibCount && entry; ++i) {                pIface->navigate(Child, i, &sibling);                Q_ASSERT(sibling);                if (!sibling || (sibling->state(0) & Invisible)) {                    delete sibling;                    sibling = 0;                    continue;                }                if (sibling->rect(0).intersects(r))                    --entry;                if (!entry)                    break;                delete sibling;                sibling = 0;            }            delete pIface;            *target = sibling;            if (*target)                return 0;        }        break;    case Covered:        if (entry > 0) {            QAccessibleInterface *pIface = QAccessible::queryAccessibleInterface(parentObject());            if (!pIface)                return -1;            QRect r = rect(0);            int index = pIface->indexOfChild(this);            QAccessibleInterface *sibling = 0;            for (int i = 1; i < index && entry; ++i) {                pIface->navigate(Child, i, &sibling);                Q_ASSERT(sibling);                if (!sibling || (sibling->state(0) & Invisible)) {                    delete sibling;                    sibling = 0;                    continue;                }                if (sibling->rect(0).intersects(r))                    --entry;                if (!entry)                    break;                delete sibling;                sibling = 0;            }            delete pIface;            *target = sibling;            if (*target)                return 0;        }        break;    // Logical    case FocusChild:        {            if (widget()->hasFocus())                return 0;            QWidget *fw = widget()->focusWidget();            if (!fw)                return -1;            if (isAncestor(widget(), fw))                targetObject = fw;            /* ###            QWidget *parent = fw;            while (parent && !targetObject) {                parent = parent->parentWidget();                if (parent == widget())                    targetObject = fw;            }            */        }        break;    case Label:        if (entry > 0) {            QAccessibleInterface *pIface = QAccessible::queryAccessibleInterface(parentObject());            if (!pIface)                return -1;            // first check for all siblings that are labels to us            // ideally we would go through all objects and check, but that            // will be too expensive            int sibCount = pIface->childCount();            QAccessibleInterface *candidate = 0;            for (int i = 0; i < sibCount && entry; ++i) {                pIface->navigate(Child, i+1, &candidate);                Q_ASSERT(candidate);                if (candidate->relationTo(0, this, 0) & Label)                    --entry;                if (!entry)                    break;                delete candidate;                candidate = 0;            }            if (!candidate) {                if (pIface->relationTo(0, this, 0) & Label)                    --entry;                if (!entry)                    candidate = pIface;            }            if (pIface != candidate)                delete pIface;            *target = candidate;            if (*target)                return 0;        }        break;    case Labelled: // only implemented in subclasses        break;    case Controller:        if (entry > 0) {            // check all senders we are connected to,            // and figure out which one are controllers to us            QACConnectionObject *connectionObject = (QACConnectionObject*)object();            QObjectList allSenders = connectionObject->senderList();            QObjectList senders;            for (int s = 0; s < allSenders.size(); ++s) {                QObject *sender = allSenders.at(s);                QAccessibleInterface *candidate = QAccessible::queryAccessibleInterface(sender);                if (!candidate)                    continue;                if (candidate->relationTo(0, this, 0)&Controller)                    senders << sender;                delete candidate;            }            if (entry <= senders.size())                targetObject = senders.at(entry-1);        }        break;    case Controlled:        if (entry > 0) {            QObjectList allReceivers;            QACConnectionObject *connectionObject = (QACConnectionObject*)object();            for (int sig = 0; sig < d->primarySignals.count(); ++sig) {                QObjectList receivers = connectionObject->receiverList(d->primarySignals.at(sig).toAscii());                allReceivers += receivers;            }            if (entry <= allReceivers.size())                targetObject = allReceivers.at(entry-1);        }        break;    default:        break;    }    *target = QAccessible::queryAccessibleInterface(targetObject);    return *target ? 0 : -1;}/*! \reimp */int QAccessibleWidget::childCount() const{    QWidgetList cl = childWidgets(widget());    return cl.size();}/*! \reimp */int QAccessibleWidget::indexOfChild(const QAccessibleInterface *child) const{    QWidgetList cl = childWidgets(widget());    int index = cl.indexOf(qobject_cast<QWidget *>(child->object()));    if (index != -1)        ++index;    return index;}// from qwidget.cppextern QString qt_setWindowTitle_helperHelper(const QString &, QWidget*);/*! \reimp */QString QAccessibleWidget::text(Text t, int child) const{    QString str;    switch (t) {    case Name:        if (!d->name.isEmpty()) {            str = d->name;        } else if (!widget()->accessibleName().isEmpty()) {            str = widget()->accessibleName();        } else if (!child && widget()->isWindow()) {            if (widget()->isMinimized())                str = qt_setWindowTitle_helperHelper(widget()->windowIconText(), widget());            else                str = qt_setWindowTitle_helperHelper(widget()->windowTitle(), widget());        } else {            str = qt_accStripAmp(buddyString(widget()));        }        break;    case Description:        if (!d->description.isEmpty())            str = d->description;        else if (!widget()->accessibleDescription().isEmpty())            str = widget()->accessibleDescription();#ifndef QT_NO_TOOLTIP        else            str = widget()->toolTip();#endif        break;    case Help:        if (!d->help.isEmpty())            str = d->help;#ifndef QT_NO_WHATSTHIS        else            str = widget()->whatsThis();#endif        break;    case Accelerator:        if (!d->accelerator.isEmpty())            str = d->accelerator;        else            str = qt_accHotKey(buddyString(widget()));        break;    case Value:        str = d->value;        break;    default:        break;    }    return str;}/*! \reimp */QString QAccessibleWidget::actionText(int action, Text t, int child) const{    if (action == DefaultAction)        action = SetFocus;    return QAccessibleObject::actionText(action, t, child);}/*! \reimp */bool QAccessibleWidget::doAction(int action, int child, const QVariantList &params){    if (action == SetFocus || action == DefaultAction) {        if (child || !widget()->isEnabled())            return false;        if (widget()->focusPolicy() != Qt::NoFocus)            widget()->setFocus();        else if (widget()->isWindow())            widget()->activateWindow();        else            return false;        return true;    }    return QAccessibleObject::doAction(action, child, params);}/*! \reimp */QAccessible::Role QAccessibleWidget::role(int child) const{    if (!child)        return d->role;    return NoRole;}/*! \reimp */QAccessible::State QAccessibleWidget::state(int child) const{    if (child)        return Normal;    QAccessible::State state = Normal;    QWidget *w = widget();    if (w->testAttribute(Qt::WA_WState_Visible) == false)        state |= Invisible;    if (w->focusPolicy() != Qt::NoFocus && w->isActiveWindow())        state |= Focusable;    if (w->hasFocus())        state |= Focused;    if (!w->isEnabled())        state |= Unavailable;    if (w->isWindow()) {        if (w->windowFlags() & Qt::WindowSystemMenuHint)            state |= Movable;        if (w->minimumSize() != w->maximumSize())            state |= Sizeable;    }    return state;}#endif //QT_NO_ACCESSIBILITY

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -