📄 qaccessiblewidgets.cpp
字号:
return QAccessible::StaticText;}#endif // QT_NO_TEXTBROWSER#ifndef QT_NO_CALENDARWIDGET// ===================== QAccessibleCalendarWidget ========================QAccessibleCalendarWidget::QAccessibleCalendarWidget(QWidget *widget) : QAccessibleWidgetEx(widget, Table){ Q_ASSERT(qobject_cast<QCalendarWidget *>(widget));}QVariant QAccessibleCalendarWidget::invokeMethodEx(QAccessible::Method, int, const QVariantList &){ return QVariant();}int QAccessibleCalendarWidget::childCount() const{ return calendarWidget()->isNavigationBarVisible() ? 2 : 1;}int QAccessibleCalendarWidget::indexOfChild(const QAccessibleInterface *child) const{ if (!child || !child->object() || childCount() <= 0) return -1; if (qobject_cast<QAbstractItemView *>(child->object())) return childCount(); return 1;}int QAccessibleCalendarWidget::navigate(RelationFlag relation, int entry, QAccessibleInterface **target) const{ *target = 0; if (entry <= 0 || entry > childCount()) return QAccessibleWidgetEx::navigate(relation, entry, target); QWidget *targetWidget = 0; switch (relation) { case Child: if (childCount() == 1) { targetWidget = calendarView(); } else { if (entry == 1) targetWidget = navigationBar(); else targetWidget = calendarView(); } break; case Up: if (entry == 2) targetWidget = navigationBar(); break; case Down: if (entry == 1 && childCount() == 2) targetWidget = calendarView(); break; default: return QAccessibleWidgetEx::navigate(relation, entry, target); } *target = queryAccessibleInterface(targetWidget); return *target ? 0: -1;}QRect QAccessibleCalendarWidget::rect(int child) const{ if (!calendarWidget()->isVisible() || child > childCount()) return QRect(); if (child == 0) return QAccessibleWidgetEx::rect(child); QWidget *childWidget = 0; if (childCount() == 2) childWidget = child == 1 ? navigationBar() : calendarView(); else childWidget = calendarView(); return QRect(childWidget->mapToGlobal(QPoint(0, 0)), childWidget->size());}int QAccessibleCalendarWidget::childAt(int x, int y) const{ const QPoint globalTargetPos = QPoint(x, y); if (!rect(0).contains(globalTargetPos)) return -1; if (rect(1).contains(globalTargetPos)) return 1; if (rect(2).contains(globalTargetPos)) return 2; return 0;}QCalendarWidget *QAccessibleCalendarWidget::calendarWidget() const{ return static_cast<QCalendarWidget *>(object());}QAbstractItemView *QAccessibleCalendarWidget::calendarView() const{ foreach (QObject *child, calendarWidget()->children()) { if (child->objectName() == QLatin1String("qt_calendar_calendarview")) return static_cast<QAbstractItemView *>(child); } return 0;}QWidget *QAccessibleCalendarWidget::navigationBar() const{ foreach (QObject *child, calendarWidget()->children()) { if (child->objectName() == QLatin1String("qt_calendar_navigationbar")) return static_cast<QWidget *>(child); } return 0;}#endif // QT_NO_CALENDARWIDGET#ifndef QT_NO_DOCKWIDGETQAccessibleDockWidget::QAccessibleDockWidget(QWidget *widget) : QAccessibleWidgetEx(widget, Window){}int QAccessibleDockWidget::navigate(RelationFlag relation, int entry, QAccessibleInterface **iface) const{ if (relation == Child) { if (entry == 1) { *iface = new QAccessibleTitleBar(dockWidget()); return 0; } else if (entry == 2) { if (dockWidget()->widget()) *iface = QAccessible::queryAccessibleInterface(dockWidget()->widget()); return 0; } *iface = 0; return -1; } return QAccessibleWidgetEx::navigate(relation, entry, iface);}int QAccessibleDockWidget::childAt(int x, int y) const{ for (int i = childCount(); i >= 0; --i) { if (rect(i).contains(x,y)) return i; } return -1;}int QAccessibleDockWidget::childCount() const{ return dockWidget()->widget() ? 2 : 1;}int QAccessibleDockWidget::indexOfChild(const QAccessibleInterface *child) const{ if (child) { if (qobject_cast<QDockWidget *>(child->object()) == dockWidget() && child->role(0) == TitleBar) { return 1; } else { return 2; //### } } return -1;}QAccessible::Role QAccessibleDockWidget::role(int child) const{ switch (child) { case 0: return Window; case 1: return TitleBar; case 2: //### break; default: break; } return NoRole;}QAccessible::State QAccessibleDockWidget::state(int child) const{ //### mark tabified widgets as invisible return QAccessibleWidgetEx::state(child);}QRect QAccessibleDockWidget::rect (int child ) const{ QRect rect; bool mapToGlobal = true; if (child == 0) { if (dockWidget()->isFloating()) { rect = dockWidget()->frameGeometry(); mapToGlobal = false; } else { rect = dockWidget()->rect(); } }else if (child == 1) { QDockWidgetLayout *layout = qobject_cast<QDockWidgetLayout*>(dockWidget()->layout()); rect = layout->titleArea(); }else if (child == 2) { if (dockWidget()->widget()) rect = dockWidget()->widget()->geometry(); } if (rect.isNull()) return rect; if (mapToGlobal) rect.moveTopLeft(dockWidget()->mapToGlobal(rect.topLeft())); return rect;}QVariant QAccessibleDockWidget::invokeMethodEx(QAccessible::Method, int, const QVariantList &){ return QVariant();}QDockWidget *QAccessibleDockWidget::dockWidget() const{ return static_cast<QDockWidget *>(object());}////// QAccessibleTitleBar////QAccessibleTitleBar::QAccessibleTitleBar(QDockWidget *widget) : m_dockWidget(widget){}int QAccessibleTitleBar::navigate(RelationFlag relation, int entry, QAccessibleInterface **iface) const{ if (entry == 0 || relation == Self) { *iface = new QAccessibleTitleBar(dockWidget()); return 0; } switch (relation) { case Child: case FocusChild: if (entry >= 1) { QDockWidgetLayout *layout = dockWidgetLayout(); int index = 1; int role; for (role = QDockWidgetLayout::CloseButton; role <= QDockWidgetLayout::FloatButton; ++role) { QWidget *w = layout->widget((QDockWidgetLayout::Role)role); if (!w->isVisible()) continue; if (index == entry) break; ++index; } *iface = 0; return role > QDockWidgetLayout::FloatButton ? -1 : index; } break; case Ancestor: { QAccessibleDockWidget *target = new QAccessibleDockWidget(dockWidget()); int index; if (entry == 1) { *iface = target; return 0; } index = target->navigate(Ancestor, entry - 1, iface); delete target; return index; break;} case Sibling: return navigate(Child, entry, iface); break; default: break; } *iface = 0; return -1;}QAccessible::Relation QAccessibleTitleBar::relationTo(int /*child*/, const QAccessibleInterface * /*other*/, int /*otherChild*/) const{ return Unrelated; //###}int QAccessibleTitleBar::indexOfChild(const QAccessibleInterface * /*child*/) const{ return -1;}int QAccessibleTitleBar::childCount() const{ QDockWidgetLayout *layout = dockWidgetLayout(); int count = 0; for (int role = QDockWidgetLayout::CloseButton; role <= QDockWidgetLayout::FloatButton; ++role) { QWidget *w = layout->widget((QDockWidgetLayout::Role)role); if (w && w->isVisible()) ++count; } return count;}QString QAccessibleTitleBar::text(Text t, int child) const{ if (!child) { if (t == Value) { return dockWidget()->windowTitle(); } } return QString();}QAccessible::State QAccessibleTitleBar::state(int child) const{ QAccessible::State state = Normal; if (child) { QDockWidgetLayout *layout = dockWidgetLayout(); QAbstractButton *b = static_cast<QAbstractButton *>(layout->widget((QDockWidgetLayout::Role)child)); if (b) { if (b->isDown()) state |= Pressed; } } else { QDockWidget *w = dockWidget(); 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; } return state;}QRect QAccessibleTitleBar::rect (int child ) const{ bool mapToGlobal = true; QRect rect; if (child == 0) { if (dockWidget()->isFloating()) { rect = dockWidget()->frameGeometry(); QPoint globalPos = dockWidget()->mapToGlobal( dockWidget()->widget()->rect().topLeft() ); globalPos.ry()--; rect.setBottom(globalPos.y()); mapToGlobal = false; } else { QDockWidgetLayout *layout = qobject_cast<QDockWidgetLayout*>(dockWidget()->layout()); rect = layout->titleArea(); } }else if (child >= 1 && child <= childCount()) { QDockWidgetLayout *layout = dockWidgetLayout(); int index = 1; for (int role = QDockWidgetLayout::CloseButton; role <= QDockWidgetLayout::FloatButton; ++role) { QWidget *w = layout->widget((QDockWidgetLayout::Role)role); if (!w || !w->isVisible()) continue; if (index == child) { rect = w->geometry(); break; } ++index; } } if (rect.isNull()) return rect; if (mapToGlobal) rect.moveTopLeft(dockWidget()->mapToGlobal(rect.topLeft())); return rect;}int QAccessibleTitleBar::childAt(int x, int y) const{ for (int i = childCount(); i >= 0; --i) { if (rect(i).contains(x,y)) return i; } return -1;}QObject *QAccessibleTitleBar::object() const{ return m_dockWidget;}QDockWidgetLayout *QAccessibleTitleBar::dockWidgetLayout() const{ return qobject_cast<QDockWidgetLayout*>(dockWidget()->layout());}QDockWidget *QAccessibleTitleBar::dockWidget() const{ return m_dockWidget;}QString QAccessibleTitleBar::actionText(int action, Text t, int child) const{ QString str; if (child >= 1 && child <= childCount()) { if (t == Name) { switch (action) { case Press: case DefaultAction: if (child == QDockWidgetLayout::CloseButton) { str = QDockWidget::tr("Close"); } else if (child == QDockWidgetLayout::FloatButton) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -