/*! \reimp */ QVector<QPair<QAccessibleInterface*, QAccessible::Relation> > QAccessibleWidget::relations(QAccessible::Relation match /*= QAccessible::AllRelations*/) const { QVector<QPair<QAccessibleInterface*, QAccessible::Relation> > rels; if (match & QAccessible::Label) { const QAccessible::Relation rel = QAccessible::Label; if (QWidget *parent = widget()->parentWidget()) { #ifndef QT_NO_SHORTCUT // 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 const QList<QWidget*> kids = childWidgets(parent); for (int i = 0; i < kids.count(); ++i) { if (QLabel *labelSibling = qobject_cast<QLabel*>(kids.at(i))) { if (labelSibling->buddy() == widget()) { QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(labelSibling); rels.append(qMakePair(iface, rel)); } } } #endif #ifndef QT_NO_GROUPBOX QGroupBox *groupbox = qobject_cast<QGroupBox*>(parent); if (groupbox && !groupbox->title().isEmpty()) { QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(groupbox); rels.append(qMakePair(iface, rel)); } #endif } } if (match & QAccessible::Controlled) { QObjectList allReceivers; QACConnectionObject *connectionObject = (QACConnectionObject*)object(); for (int sig = 0; sig < d->primarySignals.count(); ++sig) { const QObjectList receivers = connectionObject->receiverList(d->primarySignals.at(sig).toLatin1()); allReceivers += receivers; } allReceivers.removeAll(object()); //### The object might connect to itself internally for (int i = 0; i < allReceivers.count(); ++i) { const QAccessible::Relation rel = QAccessible::Controlled; QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(allReceivers.at(i)); if (iface) rels.append(qMakePair(iface, rel)); } } return rels; }