📄 qaccessiblemenu.cpp
字号:
return MenuBar; QAction *action = menuBar()->actions()[child-1]; if (action && action->isSeparator()) return Separator; return MenuItem;}QAccessible::State QAccessibleMenuBar::state(int child) const{ State s = QAccessibleWidgetEx::state(child); if (!child) return s; QAction *action = menuBar()->actions().value(child-1, 0); if (!action) return s; if (menuBar()->style()->styleHint(QStyle::SH_Menu_MouseTracking)) s |= HotTracked; if (action->isSeparator() || !action->isEnabled()) s |= Unavailable; if (menuBar()->activeAction() == action) s |= Focused; return s;}QString QAccessibleMenuBar::actionText(int action, QAccessible::Text text, int child) const{ if (action == QAccessible::DefaultAction && child && text == QAccessible::Name) { QAction *a = menuBar()->actions().value(child-1, 0); if (!a || a->isSeparator()) return QString(); if (a->menu()) { if (a->menu()->isVisible()) return QMenu::tr("Close"); return QMenu::tr("Open"); } return QMenu::tr("Execute"); } return QAccessibleWidgetEx::actionText(action, text, child);}bool QAccessibleMenuBar::doAction(int act, int child, const QVariantList &){ if (act != !child) return false; QAction *action = menuBar()->actions().value(child-1, 0); if (!action || !action->isEnabled()) return false; if (action->menu() && action->menu()->isVisible()) action->menu()->hide(); else menuBar()->setActiveAction(action); return true;}#endif // QT_NO_MENUBARQAccessibleMenuItem::QAccessibleMenuItem(QWidget *owner, QAction *action) : m_action(action), m_owner(owner){}QAccessibleMenuItem::~QAccessibleMenuItem(){}int QAccessibleMenuItem::childAt(int x, int y ) const{ for (int i = childCount(); i >= 0; --i) { if (rect(i).contains(x,y)) return i; } return -1;}int QAccessibleMenuItem::childCount() const{ return m_action->menu() ? 1 : 0;}QString QAccessibleMenuItem::actionText(int action, Text text, int child ) const{ if (text == Name && child == 0) { switch (action) { case Press: case DefaultAction: return QMenu::tr("Execute"); break; default: break; } } return QString();}bool QAccessibleMenuItem::doAction(int action, int child, const QVariantList & /*params = QVariantList()*/ ){ if ((action == Press || action == DefaultAction) && child == 0) { m_action->trigger(); return true; } return false;}int QAccessibleMenuItem::indexOfChild( const QAccessibleInterface * child ) const{ if (child->role(0) == PopupMenu && child->object() == m_action->menu()) return 1; return -1;}bool QAccessibleMenuItem::isValid() const{ return m_action ? true : false;}int QAccessibleMenuItem::navigate(RelationFlag relation, int entry, QAccessibleInterface ** target ) const{ int ret = -1; if (entry < 0) { *target = 0; return ret; } if (relation == Self || entry == 0) { *target = new QAccessibleMenuItem(owner(), action()); return 0; } switch (relation) { case Child: if (entry <= childCount()) { *target = new QAccessibleMenu(action()->menu()); ret = 0; } break; case Ancestor:{ QWidget *parent = owner(); QAccessibleInterface *ancestor = parent ? QAccessible::queryAccessibleInterface(parent) : 0; if (ancestor) { if (entry == 1) { *target = ancestor; ret = 0; } else { ret = ancestor->navigate(Ancestor, entry - 1, target); delete ancestor; } } break;} case Up: case Down:{ QAccessibleInterface *parent = 0; int ent = navigate(Ancestor, 1, &parent); if (ent == 0) { int index = parent->indexOfChild(this); if (index != -1) { index += (relation == Down ? +1 : -1); ret = parent->navigate(Child, index, target); } } delete parent; break;} case Sibling: { QAccessibleInterface *parent = 0; int ent = navigate(Ancestor, 1, &parent); if (ent == 0) { ret = parent->navigate(Child, entry, target); } delete parent; break;} default: break; } if (ret == -1) *target = 0; return ret;}QObject *QAccessibleMenuItem::object() const{ return m_action;}QRect QAccessibleMenuItem::rect (int child ) const{ QRect rect; if (child == 0) { QWidget *own = owner();#ifndef QT_NO_MENUBAR if (QMenuBar *menuBar = qobject_cast<QMenuBar*>(own)) { rect = menuBar->actionGeometry(m_action); QPoint globalPos = menuBar->mapToGlobal(QPoint(0,0)); rect = rect.translated(globalPos); } else#endif // QT_NO_MENUBAR if (QMenu *menu = qobject_cast<QMenu*>(own)) { rect = menu->actionGeometry(m_action); QPoint globalPos = menu->mapToGlobal(QPoint(0,0)); rect = rect.translated(globalPos); } } else if (child == 1) { QMenu *menu = m_action->menu(); if (menu) { rect = menu->rect(); QPoint globalPos = menu->mapToGlobal(QPoint(0,0)); rect = rect.translated(globalPos); } } return rect;}QAccessible::Relation QAccessibleMenuItem::relationTo ( int child, const QAccessibleInterface * other, int otherChild ) const{ if (other->object() == owner()) { return Child; } Q_UNUSED(child) Q_UNUSED(other) Q_UNUSED(otherChild) // ### return Unrelated;}QAccessible::Role QAccessibleMenuItem::role(int /*child*/ ) const{ return m_action->isSeparator() ? Separator :MenuItem;}void QAccessibleMenuItem::setText ( Text /*t*/, int /*child*/, const QString & /*text */){}QAccessible::State QAccessibleMenuItem::state ( int child ) const{ QAccessible::State s = Unavailable; if (child == 0) { s = Normal; QWidget *own = owner(); if (own->testAttribute(Qt::WA_WState_Visible) == false || m_action->isVisible() == false) { s |= Invisible; } if (QMenu *menu = qobject_cast<QMenu*>(own)) { if (menu->activeAction() == m_action) s |= Focused;#ifndef QT_NO_MENUBAR } else if (QMenuBar *menuBar = qobject_cast<QMenuBar*>(own)) { if (menuBar->activeAction() == m_action) s |= Focused;#endif } if (own->style()->styleHint(QStyle::SH_Menu_MouseTracking)) s |= HotTracked; if (m_action->isSeparator() || !m_action->isEnabled()) s |= Unavailable; if (m_action->isChecked()) s |= Checked; } else if (child == 1) { QMenu *menu = m_action->menu(); if (menu) { QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(menu); s = iface->state(0); delete iface; } } return s;}QString QAccessibleMenuItem::text ( Text t, int child ) const{ QString str; switch (t) { case Name: if (child == 0) { str = m_action->text(); } else if (child == 1) { QMenu *m = m_action->menu(); if (m) str = m->title(); } str = qt_accStripAmp(str); break; case Accelerator: if (child == 0) {#ifndef QT_NO_SHORTCUT QKeySequence key = m_action->shortcut(); if (!key.isEmpty()) { str = key.toString(); } else#endif { str = qt_accHotKey(m_action->text()); } } break; default: break; } return str;}int QAccessibleMenuItem::userActionCount ( int /*child*/ ) const{ return 0;}QAction *QAccessibleMenuItem::action() const{ return m_action;}QWidget *QAccessibleMenuItem::owner() const{ return m_owner;}#endif // QT_NO_MENU#endif // QT_NO_ACCESSIBILITY
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -