📄 complexwidgets.cpp
字号:
r = comboBox()->style()->subControlRect(QStyle::CC_ComboBox, &option, sc, comboBox()); } return QRect(tp.x() + r.x(), tp.y() + r.y(), r.width(), r.height());}/*! \reimp */int QAccessibleComboBox::navigate(RelationFlag rel, int entry, QAccessibleInterface **target) const{ *target = 0; if (entry > ComboBoxSelf) switch (rel) { case Child: if (entry < PopupList) return entry; if (entry == PopupList) { QAbstractItemView *view = comboBox()->view(); QWidget *parent = view ? view->parentWidget() : 0; *target = QAccessible::queryAccessibleInterface(parent); return *target ? 0 : -1; } case QAccessible::Left: return entry == OpenList ? CurrentText : -1; case QAccessible::Right: return entry == CurrentText ? OpenList : -1; case QAccessible::Up: return -1; case QAccessible::Down: return -1; default: break; } return QAccessibleWidgetEx::navigate(rel, entry, target);}/*! \reimp */int QAccessibleComboBox::childCount() const{ return comboBox()->view() ? PopupList : OpenList;}/*! \reimp */int QAccessibleComboBox::childAt(int x, int y) const{ if (!comboBox()->isVisible()) return -1; QPoint gp = widget()->mapToGlobal(QPoint(0, 0)); if (!QRect(gp.x(), gp.y(), widget()->width(), widget()->height()).contains(x, y)) return -1; // a complex control for (int i = 1; i < PopupList; ++i) { if (rect(i).contains(x, y)) return i; } return 0;}/*! \reimp */int QAccessibleComboBox::indexOfChild(const QAccessibleInterface *child) const{ QObject *viewParent = comboBox()->view() ? comboBox()->view()->parentWidget() : 0; if (child->object() == viewParent) return PopupList; return -1;}/*! \reimp */QString QAccessibleComboBox::text(Text t, int child) const{ QString str; switch (t) { case Name: if (child == OpenList) str = QComboBox::tr("Open"); else str = QAccessibleWidgetEx::text(t, 0); break;#ifndef QT_NO_SHORTCUT case Accelerator: if (child == OpenList) str = (QString)QKeySequence(Qt::Key_Down); // missing break?#endif case Value: if (comboBox()->isEditable()) str = comboBox()->lineEdit()->text(); else str = comboBox()->currentText(); break; default: break; } if (str.isEmpty()) str = QAccessibleWidgetEx::text(t, 0); return str;}/*! \reimp */QAccessible::Role QAccessibleComboBox::role(int child) const{ switch (child) { case CurrentText: if (comboBox()->isEditable()) return EditableText; return StaticText; case OpenList: return PushButton; case PopupList: return List; default: return ComboBox; }}/*! \reimp */QAccessible::State QAccessibleComboBox::state(int /*child*/) const{ return QAccessibleWidgetEx::state(0);}/*! \reimp */bool QAccessibleComboBox::doAction(int action, int child, const QVariantList &){ if (child == 2 && (action == DefaultAction || action == Press)) { if (comboBox()->view()->isVisible()) { comboBox()->hidePopup(); } else { comboBox()->showPopup(); } return true; } return false;}QString QAccessibleComboBox::actionText(int action, Text t, int child) const{ QString text; if (child == 2 && t == Name && (action == DefaultAction || action == Press)) text = comboBox()->view()->isVisible() ? QComboBox::tr("Close") : QComboBox::tr("Open"); return text;}#endif // QT_NO_COMBOBOXstatic inline void removeInvisibleWidgetsFromList(QWidgetList *list){ if (!list || list->isEmpty()) return; for (int i = 0; i < list->count(); ++i) { QWidget *widget = list->at(i); if (!widget->isVisible()) list->removeAt(i); }}#ifndef QT_NO_SCROLLAREA// ======================= QAccessibleAbstractScrollArea =======================QAccessibleAbstractScrollArea::QAccessibleAbstractScrollArea(QWidget *widget) : QAccessibleWidgetEx(widget, Client){ Q_ASSERT(qobject_cast<QAbstractScrollArea *>(widget));}QString QAccessibleAbstractScrollArea::text(Text textType, int child) const{ if (child == Self) return QAccessibleWidgetEx::text(textType, 0); QWidgetList children = accessibleChildren(); if (child < 1 || child > children.count()) return QString(); QAccessibleInterface *childInterface = queryAccessibleInterface(children.at(child - 1)); if (!childInterface) return QString(); QString string = childInterface->text(textType, 0); delete childInterface; return string;}void QAccessibleAbstractScrollArea::setText(Text textType, int child, const QString &text){ if (text.isEmpty()) return; if (child == 0) { QAccessibleWidgetEx::setText(textType, 0, text); return; } QWidgetList children = accessibleChildren(); if (child < 1 || child > children.count()) return; QAccessibleInterface *childInterface = queryAccessibleInterface(children.at(child - 1)); if (!childInterface) return; childInterface->setText(textType, 0, text); delete childInterface;}QAccessible::State QAccessibleAbstractScrollArea::state(int child) const{ if (child == Self) return QAccessibleWidgetEx::state(child); QWidgetList children = accessibleChildren(); if (child < 1 || child > children.count()) return QAccessibleWidgetEx::state(Self); QAccessibleInterface *childInterface = queryAccessibleInterface(children.at(child - 1)); if (!childInterface) return QAccessibleWidgetEx::state(Self); QAccessible::State returnState = childInterface->state(0); delete childInterface; return returnState;}QVariant QAccessibleAbstractScrollArea::invokeMethodEx(QAccessible::Method, int, const QVariantList &){ return QVariant();}int QAccessibleAbstractScrollArea::childCount() const{ return accessibleChildren().count();}int QAccessibleAbstractScrollArea::indexOfChild(const QAccessibleInterface *child) const{ if (!child || !child->object()) return -1; int index = accessibleChildren().indexOf(qobject_cast<QWidget *>(child->object())); if (index >= 0) return ++index; return -1;}int QAccessibleAbstractScrollArea::navigate(RelationFlag relation, int entry, QAccessibleInterface **target) const{ if (!target) return -1; *target = 0; QWidget *targetWidget = 0; QWidget *entryWidget = 0; if (relation == Child || relation == Left || relation == Up || relation == Right || relation == Down) { QWidgetList children = accessibleChildren(); if (entry < 0 || entry > children.count()) return -1; if (entry == Self) entryWidget = abstractScrollArea(); else entryWidget = children.at(entry - 1); AbstractScrollAreaElement entryElement = elementType(entryWidget); // Not one of the most beautiful switches I've ever seen, but I believe it has // to be like this since each case need special handling. // It might be possible to make it more general, but I'll leave that as an exercise // to the reader. :-) switch (relation) { case Child: if (entry > 0) targetWidget = children.at(entry - 1); break; case Left: if (entry < 1) break; switch (entryElement) { case Viewport: if (!isLeftToRight()) targetWidget = abstractScrollArea()->verticalScrollBar(); break; case HorizontalContainer: if (!isLeftToRight()) targetWidget = abstractScrollArea()->cornerWidget(); break; case VerticalContainer: if (isLeftToRight()) targetWidget = abstractScrollArea()->viewport(); break; case CornerWidget: if (isLeftToRight()) targetWidget = abstractScrollArea()->horizontalScrollBar(); break; default: break; } break; case Right: if (entry < 1) break; switch (entryElement) { case Viewport: if (isLeftToRight()) targetWidget = abstractScrollArea()->verticalScrollBar(); break; case HorizontalContainer: targetWidget = abstractScrollArea()->cornerWidget(); break; case VerticalContainer: if (!isLeftToRight()) targetWidget = abstractScrollArea()->viewport(); break; case CornerWidget: if (!isLeftToRight()) targetWidget = abstractScrollArea()->horizontalScrollBar(); break; default: break; } break; case Up: if (entry < 1) break; switch (entryElement) { case HorizontalContainer: targetWidget = abstractScrollArea()->viewport(); break; case CornerWidget: targetWidget = abstractScrollArea()->verticalScrollBar(); break; default: break; } break; case Down: if (entry < 1) break; switch (entryElement) { case Viewport: targetWidget = abstractScrollArea()->horizontalScrollBar(); break; case VerticalContainer: targetWidget = abstractScrollArea()->cornerWidget(); break; default: break; } break; default: break; } } else { return QAccessibleWidgetEx::navigate(relation, entry, target); } if (qobject_cast<const QScrollBar *>(targetWidget)) targetWidget = targetWidget->parentWidget(); *target = QAccessible::queryAccessibleInterface(targetWidget); return *target ? 0: -1;}QRect QAccessibleAbstractScrollArea::rect(int child) const{ if (!abstractScrollArea()->isVisible()) return QRect(); if (child == Self) return QAccessibleWidgetEx::rect(child); QWidgetList children = accessibleChildren(); if (child < 1 || child > children.count()) return QRect(); const QWidget *childWidget = children.at(child - 1); if (!childWidget->isVisible()) return QRect(); return QRect(childWidget->mapToGlobal(QPoint(0, 0)), childWidget->size());}int QAccessibleAbstractScrollArea::childAt(int x, int y) const{ if (!abstractScrollArea()->isVisible()) return -1; const QRect globalSelfGeometry = rect(Self); if (!globalSelfGeometry.isValid() || !globalSelfGeometry.contains(QPoint(x, y))) return -1; const QWidgetList children = accessibleChildren(); for (int i = 0; i < children.count(); ++i) { const QWidget *child = children.at(i); const QRect globalChildGeometry = QRect(child->mapToGlobal(QPoint(0, 0)), child->size()); if (globalChildGeometry.contains(QPoint(x, y))) { return ++i; } } return 0;}QAbstractScrollArea *QAccessibleAbstractScrollArea::abstractScrollArea() const{ return static_cast<QAbstractScrollArea *>(object());}QWidgetList QAccessibleAbstractScrollArea::accessibleChildren() const{ QWidgetList children; // Viewport. QWidget * viewport = abstractScrollArea()->viewport(); if (viewport) children.append(viewport); // Horizontal scrollBar container. QScrollBar *horizontalScrollBar = abstractScrollArea()->horizontalScrollBar(); if (horizontalScrollBar && horizontalScrollBar->isVisible()) { children.append(horizontalScrollBar->parentWidget()); } // Vertical scrollBar container. QScrollBar *verticalScrollBar = abstractScrollArea()->verticalScrollBar(); if (verticalScrollBar && verticalScrollBar->isVisible()) { children.append(verticalScrollBar->parentWidget()); } // CornerWidget. QWidget *cornerWidget = abstractScrollArea()->cornerWidget(); if (cornerWidget && cornerWidget->isVisible()) children.append(cornerWidget); return children;}QAccessibleAbstractScrollArea::AbstractScrollAreaElementQAccessibleAbstractScrollArea::elementType(QWidget *widget) const{ if (!widget) return Undefined; if (widget == abstractScrollArea()) return Self; if (widget == abstractScrollArea()->viewport()) return Viewport; if (widget->objectName() == QLatin1String("qt_scrollarea_hcontainer")) return HorizontalContainer; if (widget->objectName() == QLatin1String("qt_scrollarea_vcontainer")) return VerticalContainer; if (widget == abstractScrollArea()->cornerWidget()) return CornerWidget; return Undefined;}bool QAccessibleAbstractScrollArea::isLeftToRight() const{ return abstractScrollArea()->isLeftToRight();}// ======================= QAccessibleScrollArea ===========================QAccessibleScrollArea::QAccessibleScrollArea(QWidget *widget) : QAccessibleAbstractScrollArea(widget){ Q_ASSERT(qobject_cast<QScrollArea *>(widget));}#endif // QT_NO_SCROLLAREA#endif // QT_NO_ACCESSIBILITY
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -