📄 qaccessiblewidget.cpp
字号:
} */ } 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;}#ifndef QT_NO_ACTION/*! \reimp */int QAccessibleWidget::userActionCount(int child) const{ if (child) return 0; return widget()->actions().count();}/*! \reimp */QString QAccessibleWidget::actionText(int action, Text t, int child) const{ if (action == DefaultAction) action = SetFocus; if (action > 0 && !child) { QAction *act = widget()->actions().value(action - 1); if (act) { switch (t) { case Name: return act->text(); case Description: return act->toolTip();#ifndef QT_NO_SHORTCUT case Accelerator: return act->shortcut().toString();#endif default: break; } } } return QAccessibleObject::actionText(action, t, child);}/*! \reimp */bool QAccessibleWidget::doAction(int action, int child, const QVariantList ¶ms){ 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; } else if (action > 0) { if (QAction *act = widget()->actions().value(action - 1)) { act->trigger(); return true; } } return QAccessibleObject::doAction(action, child, params);}#endif // QT_NO_ACTION/*! \reimp */QAccessible::Role QAccessibleWidget::role(int child) const{ if (!child) return d->role; QWidgetList childList = childWidgets(widget()); if (childList.count() > 0 && child <= childList.count()) { QWidget *targetWidget = childList.at(child - 1); QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(targetWidget); if (iface) { QAccessible::Role role = iface->role(0); delete iface; return 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;}// ### Qt 5: remove me - binary compatibility hackQAccessibleWidgetEx::QAccessibleWidgetEx(QWidget *o, Role role, const QString& name) : QAccessibleObjectEx(o){ Q_ASSERT(widget()); d = new QAccessibleWidgetPrivate(); d->role = role; d->name = name; d->asking = 0;}int QAccessibleWidgetEx::childCount() const{ return reinterpret_cast<const QAccessibleWidget *>(this)->QAccessibleWidget::childCount(); }int QAccessibleWidgetEx::indexOfChild(const QAccessibleInterface *child) const{ return reinterpret_cast<const QAccessibleWidget *>(this)->QAccessibleWidget::indexOfChild(child); }QAccessible::Relation QAccessibleWidgetEx::relationTo(int child, const QAccessibleInterface *other, int otherChild) const{ return reinterpret_cast<const QAccessibleWidget *>(this)->QAccessibleWidget::relationTo(child, other, otherChild); }int QAccessibleWidgetEx::childAt(int x, int y) const{ return reinterpret_cast<const QAccessibleWidget *>(this)->QAccessibleWidget::childAt(x, y); }QRect QAccessibleWidgetEx::rect(int child) const{ return reinterpret_cast<const QAccessibleWidget *>(this)->QAccessibleWidget::rect(child); }int QAccessibleWidgetEx::navigate(RelationFlag rel, int entry, QAccessibleInterface **target) const{ return reinterpret_cast<const QAccessibleWidget *>(this)->QAccessibleWidget::navigate(rel, entry, target); }QString QAccessibleWidgetEx::text(Text t, int child) const{ return reinterpret_cast<const QAccessibleWidget *>(this)->QAccessibleWidget::text(t, child); }QAccessible::Role QAccessibleWidgetEx::role(int child) const{ return reinterpret_cast<const QAccessibleWidget *>(this)->QAccessibleWidget::role(child); }QAccessible::State QAccessibleWidgetEx::state(int child) const{ return (reinterpret_cast<const QAccessibleWidget *>(this)->QAccessibleWidget::state(child)) | HasInvokeExtension; }QString QAccessibleWidgetEx::actionText(int action, Text t, int child) const{ return reinterpret_cast<const QAccessibleWidget *>(this)->QAccessibleWidget::actionText(action, t, child); }bool QAccessibleWidgetEx::doAction(int action, int child, const QVariantList ¶ms){ return reinterpret_cast<QAccessibleWidget *>(this)->QAccessibleWidget::doAction(action, child, params); }QAccessibleWidgetEx::~QAccessibleWidgetEx(){ delete d; }QWidget *QAccessibleWidgetEx::widget() const{ return reinterpret_cast<const QAccessibleWidget *>(this)->QAccessibleWidget::widget(); }QObject *QAccessibleWidgetEx::parentObject() const{ return reinterpret_cast<const QAccessibleWidget *>(this)->QAccessibleWidget::parentObject(); }void QAccessibleWidgetEx::addControllingSignal(const QString &signal){ reinterpret_cast<QAccessibleWidget *>(this)->QAccessibleWidget::addControllingSignal(signal); }void QAccessibleWidgetEx::setValue(const QString &value){ reinterpret_cast<QAccessibleWidget *>(this)->QAccessibleWidget::setValue(value); }void QAccessibleWidgetEx::setDescription(const QString &desc){ reinterpret_cast<QAccessibleWidget *>(this)->QAccessibleWidget::setDescription(desc); }void QAccessibleWidgetEx::setHelp(const QString &help){ reinterpret_cast<QAccessibleWidget *>(this)->QAccessibleWidget::setHelp(help); }void QAccessibleWidgetEx::setAccelerator(const QString &accel){ reinterpret_cast<QAccessibleWidget *>(this)->QAccessibleWidget::setAccelerator(accel); }QVariant QAccessibleWidgetEx::invokeMethodEx(Method method, int child, const QVariantList & /*params*/){ if (child) return QVariant(); switch (method) { case ListSupportedMethods: { QSet<QAccessible::Method> set; set << ListSupportedMethods << ForegroundColor << BackgroundColor; return qVariantFromValue(set); } case ForegroundColor: return widget()->palette().color(widget()->foregroundRole()); case BackgroundColor: return widget()->palette().color(widget()->backgroundRole()); default: return QVariant(); }}#endif //QT_NO_ACCESSIBILITY
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -