📄 qaccessiblewidgets.cpp
字号:
str = dockWidget()->isFloating() ? QDockWidget::tr("Dock") : QDockWidget::tr("Float"); } break; default: break; } } } return str;}bool QAccessibleTitleBar::doAction(int action, int child, const QVariantList& /*params*/){ if (!child || !dockWidget()->isEnabled()) return false; switch (action) { case DefaultAction: case Press: { QDockWidgetLayout *layout = dockWidgetLayout(); QAbstractButton *btn = static_cast<QAbstractButton *>(layout->widget((QDockWidgetLayout::Role)child)); if (btn) btn->animateClick(); return true; break;} default: break; } return false;}int QAccessibleTitleBar::userActionCount (int /*child*/) const{ return 0;}QAccessible::Role QAccessibleTitleBar::role(int child) const{ switch (child) { case 0: return TitleBar; break; default: if (child >= 1 && child <= childCount()) return PushButton; break; } return NoRole;}void QAccessibleTitleBar::setText(Text /*t*/, int /*child*/, const QString &/*text*/){}bool QAccessibleTitleBar::isValid() const{ return dockWidget();}#endif // QT_NO_DOCKWIDGET#ifndef QT_NO_TEXTEDITvoid QAccessibleTextEdit::addSelection(int startOffset, int endOffset){ setSelection(0, startOffset, endOffset);}QString QAccessibleTextEdit::attributes(int offset, int *startOffset, int *endOffset){ // TODO - wait for a definition of attributes Q_UNUSED(offset); Q_UNUSED(startOffset); Q_UNUSED(endOffset); return QString();}int QAccessibleTextEdit::cursorPosition(){ return textEdit()->textCursor().position();}QRect QAccessibleTextEdit::characterRect(int offset, CoordinateType coordType){ QTextEdit *edit = textEdit(); QTextCursor cursor(edit->document()); cursor.setPosition(offset); if (cursor.position() != offset) return QRect(); QRect r = edit->cursorRect(cursor); if (cursor.movePosition(QTextCursor::NextCharacter)) { r.setWidth(edit->cursorRect(cursor).y() - r.y()); } else { // we don't know the width of the character - maybe because we're at document end // in that case, IAccessible2 tells us to return the width of a default character int averageCharWidth = QFontMetrics(cursor.charFormat().font()).averageCharWidth(); if (edit->layoutDirection() == Qt::RightToLeft) averageCharWidth *= -1; r.setWidth(averageCharWidth); } switch (coordType) { case RelativeToScreen: r.moveTo(edit->viewport()->mapToGlobal(r.topLeft())); break; case RelativeToParent: break; } return r;}int QAccessibleTextEdit::selectionCount(){ return textEdit()->textCursor().hasSelection() ? 1 : 0;}int QAccessibleTextEdit::offsetAtPoint(const QPoint &point, CoordinateType coordType){ QTextEdit *edit = textEdit(); QPoint p = point; if (coordType == RelativeToScreen) p = edit->viewport()->mapFromGlobal(p); // convert to document coordinates p += QPoint(edit->horizontalScrollBar()->value(), edit->verticalScrollBar()->value()); return edit->document()->documentLayout()->hitTest(p, Qt::ExactHit);}void QAccessibleTextEdit::selection(int selectionIndex, int *startOffset, int *endOffset){ *startOffset = *endOffset = 0; QTextCursor cursor = textEdit()->textCursor(); if (selectionIndex != 0 || !cursor.hasSelection()) return; *startOffset = cursor.selectionStart(); *endOffset = cursor.selectionEnd();}QString QAccessibleTextEdit::text(int startOffset, int endOffset){ QTextCursor cursor(textEdit()->document()); cursor.setPosition(startOffset, QTextCursor::MoveAnchor); cursor.setPosition(endOffset, QTextCursor::KeepAnchor); return cursor.selectedText();}QString QAccessibleTextEdit::textBeforeOffset (int offset, BoundaryType boundaryType, int *startOffset, int *endOffset){ // TODO - what exactly is before? Q_UNUSED(offset); Q_UNUSED(boundaryType); Q_UNUSED(startOffset); Q_UNUSED(endOffset); return QString();}QString QAccessibleTextEdit::textAfterOffset(int offset, BoundaryType boundaryType, int *startOffset, int *endOffset){ // TODO - what exactly is after? Q_UNUSED(offset); Q_UNUSED(boundaryType); Q_UNUSED(startOffset); Q_UNUSED(endOffset); return QString();}QString QAccessibleTextEdit::textAtOffset(int offset, BoundaryType boundaryType, int *startOffset, int *endOffset){ Q_ASSERT(startOffset); Q_ASSERT(endOffset); *startOffset = *endOffset = -1; QTextEdit *edit = textEdit(); QTextCursor cursor(edit->document()); if (offset >= characterCount()) return QString(); switch (boundaryType) { case CharBoundary: cursor.setPosition(offset); *startOffset = cursor.position(); cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor); *endOffset = cursor.position(); break; case WordBoundary: cursor.movePosition(QTextCursor::StartOfWord, QTextCursor::MoveAnchor); *startOffset = cursor.position(); cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor); *endOffset = cursor.position(); break; case SentenceBoundary: // TODO - what's a sentence? return QString(); case LineBoundary: cursor.movePosition(QTextCursor::StartOfLine, QTextCursor::MoveAnchor); *startOffset = cursor.position(); cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor); *endOffset = cursor.position(); break; case ParagraphBoundary: cursor.movePosition(QTextCursor::StartOfBlock, QTextCursor::MoveAnchor); *startOffset = cursor.position(); cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); *endOffset = cursor.position(); break; case NoBoundary: { *startOffset = 0; const QString txt = edit->toPlainText(); *endOffset = txt.count(); return txt; } default: qDebug("AccessibleTextAdaptor::textAtOffset: Unknown boundary type %d", boundaryType); return QString(); } return cursor.selectedText();}void QAccessibleTextEdit::removeSelection(int selectionIndex){ if (selectionIndex != 0) return; QTextCursor cursor = textEdit()->textCursor(); cursor.clearSelection(); textEdit()->setTextCursor(cursor);}void QAccessibleTextEdit::setCursorPosition(int position){ QTextCursor cursor = textEdit()->textCursor(); cursor.setPosition(position); textEdit()->setTextCursor(cursor);}void QAccessibleTextEdit::setSelection(int selectionIndex, int startOffset, int endOffset){ if (selectionIndex != 0) return; QTextCursor cursor = textEdit()->textCursor(); cursor.setPosition(startOffset, QTextCursor::MoveAnchor); cursor.setPosition(endOffset, QTextCursor::KeepAnchor); textEdit()->setTextCursor(cursor);}int QAccessibleTextEdit::characterCount(){ return textEdit()->toPlainText().count();}void QAccessibleTextEdit::scrollToSubstring(int startIndex, int endIndex){ QTextEdit *edit = textEdit(); QTextCursor cursor(edit->document()); cursor.setPosition(startIndex); QRect r = edit->cursorRect(cursor); cursor.setPosition(endIndex); r.setBottomRight(edit->cursorRect(cursor).bottomRight()); r.moveTo(r.x() + edit->horizontalScrollBar()->value(), r.y() + edit->verticalScrollBar()->value()); // E V I L, but ensureVisible is not public if (!QMetaObject::invokeMethod(edit, "_q_ensureVisible", Q_ARG(QRectF, r))) qWarning("AccessibleTextEdit::scrollToSubstring failed!");}static QTextCursor cursorForRange(QTextEdit *textEdit, int startOffset, int endOffset){ QTextCursor cursor(textEdit->document()); cursor.setPosition(startOffset, QTextCursor::MoveAnchor); cursor.setPosition(endOffset, QTextCursor::KeepAnchor); return cursor;}void QAccessibleTextEdit::copyText(int startOffset, int endOffset){ QTextCursor cursor = cursorForRange(textEdit(), startOffset, endOffset); if (!cursor.hasSelection()) return;// QApplication::clipboard()->setMimeData(new QTextEditMimeData(cursor.selection()));}void QAccessibleTextEdit::deleteText(int startOffset, int endOffset){ QTextCursor cursor = cursorForRange(textEdit(), startOffset, endOffset); cursor.removeSelectedText();}void QAccessibleTextEdit::insertText(int offset, const QString &text){ QTextCursor cursor(textEdit()->document()); cursor.setPosition(offset); cursor.insertText(text);}void QAccessibleTextEdit::cutText(int startOffset, int endOffset){ QTextCursor cursor = cursorForRange(textEdit(), startOffset, endOffset); if (!cursor.hasSelection()) return;// QApplication::clipboard()->setMimeData(new QTextEditMimeData(cursor.selection())); cursor.removeSelectedText();}void QAccessibleTextEdit::pasteText(int offset){ QTextEdit *edit = textEdit(); QTextCursor oldCursor = edit->textCursor(); QTextCursor newCursor = oldCursor; newCursor.setPosition(offset); edit->setTextCursor(newCursor);#ifndef QT_NO_CLIPBOARD edit->paste();#endif edit->setTextCursor(oldCursor);}void QAccessibleTextEdit::replaceText(int startOffset, int endOffset, const QString &text){ QTextCursor cursor = cursorForRange(textEdit(), startOffset, endOffset); cursor.removeSelectedText(); cursor.insertText(text);}void QAccessibleTextEdit::setAttributes(int startOffset, int endOffset, const QString &attributes){ // TODO Q_UNUSED(startOffset); Q_UNUSED(endOffset); Q_UNUSED(attributes);}#endif // QT_NO_TEXTEDIT#ifndef QT_NO_MAINWINDOWQAccessibleMainWindow::QAccessibleMainWindow(QWidget *widget) : QAccessibleWidgetEx(widget, Application) { }QVariant QAccessibleMainWindow::invokeMethodEx(QAccessible::Method /*method*/, int /*child*/, const QVariantList & /*params*/){ return QVariant();}int QAccessibleMainWindow::childCount() const{ QList<QWidget*> kids = childWidgets(mainWindow(), true); return kids.count();}int QAccessibleMainWindow::indexOfChild(const QAccessibleInterface *iface) const{ QList<QWidget*> kids = childWidgets(mainWindow(), true); int childIndex = kids.indexOf(static_cast<QWidget*>(iface->object())); return childIndex == -1 ? -1 : ++childIndex;}int QAccessibleMainWindow::navigate(RelationFlag relation, int entry, QAccessibleInterface **iface) const{ if (relation == Child && entry >= 1) { QList<QWidget*> kids = childWidgets(mainWindow(), true); if (entry <= kids.count()) { *iface = QAccessible::queryAccessibleInterface(kids.at(entry - 1)); return *iface ? 0 : -1; } } return QAccessibleWidgetEx::navigate(relation, entry, iface);}QMainWindow *QAccessibleMainWindow::mainWindow() const{ return qobject_cast<QMainWindow *>(object());}#endif //QT_NO_MAINWINDOW#endif // QT_NO_ACCESSIBILITY
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -