Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qaccessible.h
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4
5#if 0
6// keep existing syncqt header working after the move of the class
7// into qaccessible_base
8#pragma qt_class(QAccessible)
9#endif
10
11#ifndef QACCESSIBLE_H
12#define QACCESSIBLE_H
13#include <QtGui/qtguiglobal.h>
14
15#if QT_CONFIG(accessibility)
16
17#include <QtCore/qcoreapplication.h>
18#include <QtCore/qglobal.h>
19#include <QtCore/qlist.h>
20#include <QtCore/qobject.h>
21#include <QtCore/qrect.h>
22#include <QtCore/qset.h>
23#include <QtCore/qvariant.h>
24#include <QtGui/qcolor.h>
25#include <QtGui/qevent.h>
26#include <QtGui/qaccessible_base.h>
27
28QT_BEGIN_NAMESPACE
29
30class QDebug;
31class QAccessibleInterface;
32class QAccessibleEvent;
33class QWindow;
34class QTextCursor;
35
36class QAccessible2Interface;
37class QAccessibleTextInterface;
38class QAccessibleEditableTextInterface;
39class QAccessibleValueInterface;
40class QAccessibleActionInterface;
41class QAccessibleImageInterface;
42class QAccessibleTableInterface;
43class QAccessibleTableCellInterface;
44class QAccessibleHyperlinkInterface;
45class QAccessibleSelectionInterface;
46class QAccessibleAttributesInterface;
47class QAccessibleTableModelChangeEvent;
48
49class Q_GUI_EXPORT QAccessibleInterface
50{
51protected:
52 virtual ~QAccessibleInterface();
53
54public:
55 // check for valid pointers
56 virtual bool isValid() const = 0;
57 virtual QObject *object() const = 0;
58 virtual QWindow *window() const;
59
60 // relations
61 virtual QList<std::pair<QAccessibleInterface *, QAccessible::Relation>>
62 relations(QAccessible::Relation match = QAccessible::AllRelations) const;
63 virtual QAccessibleInterface *focusChild() const;
64
65 virtual QAccessibleInterface *childAt(int x, int y) const = 0;
66
67 // navigation, hierarchy
68 virtual QAccessibleInterface *parent() const = 0;
69 virtual QAccessibleInterface *child(int index) const = 0;
70 virtual int childCount() const = 0;
71 virtual int indexOfChild(const QAccessibleInterface *) const = 0;
72
73 // properties and state
74 virtual QString text(QAccessible::Text t) const = 0;
75 virtual void setText(QAccessible::Text t, const QString &text) = 0;
76 virtual QRect rect() const = 0;
77 virtual QAccessible::Role role() const = 0;
78 virtual QAccessible::State state() const = 0;
79
80 virtual QColor foregroundColor() const;
81 virtual QColor backgroundColor() const;
82
83 inline QAccessibleTextInterface *textInterface()
84 { return reinterpret_cast<QAccessibleTextInterface *>(interface_cast(QAccessible::TextInterface)); }
85
86 inline QAccessibleEditableTextInterface *editableTextInterface()
87 { return reinterpret_cast<QAccessibleEditableTextInterface *>(interface_cast(QAccessible::EditableTextInterface)); }
88
89 inline QAccessibleValueInterface *valueInterface()
90 { return reinterpret_cast<QAccessibleValueInterface *>(interface_cast(QAccessible::ValueInterface)); }
91
92 inline QAccessibleActionInterface *actionInterface()
93 { return reinterpret_cast<QAccessibleActionInterface *>(interface_cast(QAccessible::ActionInterface)); }
94
95 inline QAccessibleImageInterface *imageInterface()
96 { return reinterpret_cast<QAccessibleImageInterface *>(interface_cast(QAccessible::ImageInterface)); }
97
98 inline QAccessibleTableInterface *tableInterface()
99 { return reinterpret_cast<QAccessibleTableInterface *>(interface_cast(QAccessible::TableInterface)); }
100
101 inline QAccessibleTableCellInterface *tableCellInterface()
102 { return reinterpret_cast<QAccessibleTableCellInterface *>(interface_cast(QAccessible::TableCellInterface)); }
103
104 inline QAccessibleHyperlinkInterface *hyperlinkInterface()
105 { return reinterpret_cast<QAccessibleHyperlinkInterface *>(interface_cast(QAccessible::HyperlinkInterface)); }
106
107 inline QAccessibleSelectionInterface *selectionInterface()
108 { return reinterpret_cast<QAccessibleSelectionInterface *>(interface_cast(QAccessible::SelectionInterface)); }
109
110 inline QAccessibleAttributesInterface *attributesInterface()
111 { return reinterpret_cast<QAccessibleAttributesInterface *>(interface_cast(QAccessible::AttributesInterface)); }
112
113 virtual void virtual_hook(int id, void *data);
114
115 virtual void *interface_cast(QAccessible::InterfaceType)
116 { return nullptr; }
117
118protected:
119 friend class QAccessibleCache;
120};
121
122class Q_GUI_EXPORT QAccessibleTextInterface
123{
124public:
125 virtual ~QAccessibleTextInterface();
126 // selection
127 virtual void selection(int selectionIndex, int *startOffset, int *endOffset) const = 0;
128 virtual int selectionCount() const = 0;
129 virtual void addSelection(int startOffset, int endOffset) = 0;
130 virtual void removeSelection(int selectionIndex) = 0;
131 virtual void setSelection(int selectionIndex, int startOffset, int endOffset) = 0;
132
133 // cursor
134 virtual int cursorPosition() const = 0;
135 virtual void setCursorPosition(int position) = 0;
136
137 // text
138 virtual QString text(int startOffset, int endOffset) const = 0;
139 virtual QString textBeforeOffset(int offset, QAccessible::TextBoundaryType boundaryType,
140 int *startOffset, int *endOffset) const;
141 virtual QString textAfterOffset(int offset, QAccessible::TextBoundaryType boundaryType,
142 int *startOffset, int *endOffset) const;
143 virtual QString textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType,
144 int *startOffset, int *endOffset) const;
145 virtual int characterCount() const = 0;
146
147 // character <-> geometry
148 virtual QRect characterRect(int offset) const = 0;
149 virtual int offsetAtPoint(const QPoint &point) const = 0;
150
151 virtual void scrollToSubstring(int startIndex, int endIndex) = 0;
152 virtual QString attributes(int offset, int *startOffset, int *endOffset) const = 0;
153};
154
155class Q_GUI_EXPORT QAccessibleEditableTextInterface
156{
157public:
158 virtual ~QAccessibleEditableTextInterface();
159
160 virtual void deleteText(int startOffset, int endOffset) = 0;
161 virtual void insertText(int offset, const QString &text) = 0;
162 virtual void replaceText(int startOffset, int endOffset, const QString &text) = 0;
163};
164
165class Q_GUI_EXPORT QAccessibleValueInterface
166{
167public:
168 virtual ~QAccessibleValueInterface();
169
170 virtual QVariant currentValue() const = 0;
171 virtual void setCurrentValue(const QVariant &value) = 0;
172 virtual QVariant maximumValue() const = 0;
173 virtual QVariant minimumValue() const = 0;
174 virtual QVariant minimumStepSize() const = 0;
175};
176
177class Q_GUI_EXPORT QAccessibleTableCellInterface
178{
179public:
180 virtual ~QAccessibleTableCellInterface();
181
182 virtual bool isSelected() const = 0;
183
184 virtual QList<QAccessibleInterface*> columnHeaderCells() const = 0;
185 virtual QList<QAccessibleInterface*> rowHeaderCells() const = 0;
186 virtual int columnIndex() const = 0;
187 virtual int rowIndex() const = 0;
188 virtual int columnExtent() const = 0;
189 virtual int rowExtent() const = 0;
190
191 virtual QAccessibleInterface* table() const = 0;
192};
193
194class Q_GUI_EXPORT QAccessibleTableInterface
195{
196public:
197 virtual ~QAccessibleTableInterface();
198
199 virtual QAccessibleInterface *caption() const = 0;
200 virtual QAccessibleInterface *summary() const = 0;
201
202 virtual QAccessibleInterface *cellAt (int row, int column) const = 0;
203 virtual int selectedCellCount() const = 0;
204 virtual QList<QAccessibleInterface*> selectedCells() const = 0;
205
206 virtual QString columnDescription(int column) const = 0;
207 virtual QString rowDescription(int row) const = 0;
208 virtual int selectedColumnCount() const = 0;
209 virtual int selectedRowCount() const = 0;
210 virtual int columnCount() const = 0;
211 virtual int rowCount() const = 0;
212 virtual QList<int> selectedColumns() const = 0;
213 virtual QList<int> selectedRows() const = 0;
214 virtual bool isColumnSelected(int column) const = 0;
215 virtual bool isRowSelected(int row) const = 0;
216 virtual bool selectRow(int row) = 0;
217 virtual bool selectColumn(int column) = 0;
218 virtual bool unselectRow(int row) = 0;
219 virtual bool unselectColumn(int column) = 0;
220
221 virtual void modelChange(QAccessibleTableModelChangeEvent *event) = 0;
222
223protected:
224friend class QAbstractItemView;
225friend class QAbstractItemViewPrivate;
226};
227
228class Q_GUI_EXPORT QAccessibleActionInterface
229{
230 Q_DECLARE_TR_FUNCTIONS(QAccessibleActionInterface)
231public:
232 virtual ~QAccessibleActionInterface();
233
234 virtual QStringList actionNames() const = 0;
235 virtual QString localizedActionName(const QString &name) const;
236 virtual QString localizedActionDescription(const QString &name) const;
237 virtual void doAction(const QString &actionName) = 0;
238 virtual QStringList keyBindingsForAction(const QString &actionName) const = 0;
239
240 static const QString &pressAction();
241 static const QString &increaseAction();
242 static const QString &decreaseAction();
243 static const QString &showMenuAction();
244 static const QString &setFocusAction();
245 static const QString &showOnScreenAction();
246 static const QString &toggleAction();
247 static QString scrollLeftAction();
248 static QString scrollRightAction();
249 static QString scrollUpAction();
250 static QString scrollDownAction();
251 static QString nextPageAction();
252 static QString previousPageAction();
253};
254
255class Q_GUI_EXPORT QAccessibleImageInterface
256{
257public:
258 virtual ~QAccessibleImageInterface();
259
260 virtual QString imageDescription() const = 0;
261 virtual QSize imageSize() const = 0;
262 virtual QPoint imagePosition() const = 0;
263};
264
265class Q_GUI_EXPORT QAccessibleHyperlinkInterface
266{
267public:
268 virtual ~QAccessibleHyperlinkInterface();
269
270 virtual QString anchor() const = 0;
271 virtual QString anchorTarget() const = 0;
272 virtual int startIndex() const = 0;
273 virtual int endIndex() const = 0;
274 virtual bool isValid() const = 0;
275};
276
277class Q_GUI_EXPORT QAccessibleSelectionInterface
278{
279public:
280 virtual ~QAccessibleSelectionInterface();
281
282 virtual int selectedItemCount() const = 0;
283 virtual QList<QAccessibleInterface*> selectedItems() const = 0;
284 virtual QAccessibleInterface* selectedItem(int selectionIndex) const;
285 virtual bool isSelected(QAccessibleInterface *childItem) const;
286 virtual bool select(QAccessibleInterface *childItem) = 0;
287 virtual bool unselect(QAccessibleInterface *childItem) = 0;
288 virtual bool selectAll() = 0;
289 virtual bool clear() = 0;
290};
291
292class Q_GUI_EXPORT QAccessibleAttributesInterface
293{
294public:
295 virtual ~QAccessibleAttributesInterface();
296 virtual QList<QAccessible::Attribute> attributeKeys() const = 0;
297 virtual QVariant attributeValue(QAccessible::Attribute key) const = 0;
298};
299
300
301class Q_GUI_EXPORT QAccessibleEvent
302{
303 Q_DISABLE_COPY(QAccessibleEvent)
304public:
305
306 inline QAccessibleEvent(QObject *obj, QAccessible::Event typ)
307 : m_type(typ), m_object(obj), m_child(-1)
308 {
309 if (m_type != QAccessible::ObjectDestroyed)
310 Q_ASSERT(obj);
311 // All events below have a subclass of QAccessibleEvent.
312 // Use the subclass, since it's expected that it's possible to cast to that.
313 Q_ASSERT(m_type != QAccessible::ValueChanged);
314 Q_ASSERT(m_type != QAccessible::StateChanged);
315 Q_ASSERT(m_type != QAccessible::TextCaretMoved);
316 Q_ASSERT(m_type != QAccessible::TextSelectionChanged);
317 Q_ASSERT(m_type != QAccessible::TextInserted);
318 Q_ASSERT(m_type != QAccessible::TextRemoved);
319 Q_ASSERT(m_type != QAccessible::TextUpdated);
320 Q_ASSERT(m_type != QAccessible::TableModelChanged);
321 Q_ASSERT(m_type != QAccessible::Announcement);
322 }
323
324 inline QAccessibleEvent(QAccessibleInterface *iface, QAccessible::Event typ)
325 : m_type(typ)
326 {
327 Q_ASSERT(iface);
328 Q_ASSERT(m_type != QAccessible::ValueChanged);
329 Q_ASSERT(m_type != QAccessible::StateChanged);
330 Q_ASSERT(m_type != QAccessible::TextCaretMoved);
331 Q_ASSERT(m_type != QAccessible::TextSelectionChanged);
332 Q_ASSERT(m_type != QAccessible::TextInserted);
333 Q_ASSERT(m_type != QAccessible::TextRemoved);
334 Q_ASSERT(m_type != QAccessible::TextUpdated);
335 Q_ASSERT(m_type != QAccessible::TableModelChanged);
336 Q_ASSERT(m_type != QAccessible::Announcement);
337 m_uniqueId = QAccessible::uniqueId(iface);
338 m_object = iface->object();
339 }
340
341 virtual ~QAccessibleEvent();
342
343 QAccessible::Event type() const { return m_type; }
344 QObject *object() const { return m_object; }
345 QAccessible::Id uniqueId() const;
346
347 void setChild(int chld);
348 int child() const { return m_child; }
349
350 virtual QAccessibleInterface *accessibleInterface() const;
351
352protected:
353 QAccessible::Event m_type;
354 QObject *m_object;
355 union {
356 int m_child;
357 QAccessible::Id m_uniqueId;
358 };
359
360 friend class QTestAccessibility;
361};
362
363class Q_GUI_EXPORT QAccessibleStateChangeEvent :public QAccessibleEvent
364{
365public:
366 inline QAccessibleStateChangeEvent(QObject *obj, QAccessible::State state)
367 : QAccessibleEvent(obj, QAccessible::InvalidEvent), m_changedStates(state)
368 {
369 m_type = QAccessible::StateChanged;
370 }
371 inline QAccessibleStateChangeEvent(QAccessibleInterface *iface, QAccessible::State state)
372 : QAccessibleEvent(iface, QAccessible::InvalidEvent), m_changedStates(state)
373 {
374 m_type = QAccessible::StateChanged;
375 }
376 ~QAccessibleStateChangeEvent();
377
378 QAccessible::State changedStates() const {
379 return m_changedStates;
380 }
381
382protected:
383 QAccessible::State m_changedStates;
384};
385
386// Update the cursor and optionally the selection.
387class Q_GUI_EXPORT QAccessibleTextCursorEvent : public QAccessibleEvent
388{
389public:
390 inline QAccessibleTextCursorEvent(QObject *obj, int cursorPos)
391 : QAccessibleEvent(obj, QAccessible::InvalidEvent)
392 , m_cursorPosition(cursorPos)
393 {
394 m_type = QAccessible::TextCaretMoved;
395 }
396 inline QAccessibleTextCursorEvent(QAccessibleInterface *iface, int cursorPos)
397 : QAccessibleEvent(iface, QAccessible::InvalidEvent)
398 , m_cursorPosition(cursorPos)
399 {
400 m_type = QAccessible::TextCaretMoved;
401 }
402
403 ~QAccessibleTextCursorEvent();
404
405 void setCursorPosition(int position) { m_cursorPosition = position; }
406 int cursorPosition() const { return m_cursorPosition; }
407
408protected:
409 int m_cursorPosition;
410};
411
412// Updates the cursor position simultaneously. By default the cursor is set to the end of the selection.
413class Q_GUI_EXPORT QAccessibleTextSelectionEvent : public QAccessibleTextCursorEvent
414{
415public:
416 inline QAccessibleTextSelectionEvent(QObject *obj, int start, int end)
417 : QAccessibleTextCursorEvent(obj, (start == -1) ? 0 : end)
418 , m_selectionStart(start), m_selectionEnd(end)
419 {
420 m_type = QAccessible::TextSelectionChanged;
421 }
422 inline QAccessibleTextSelectionEvent(QAccessibleInterface *iface, int start, int end)
423 : QAccessibleTextCursorEvent(iface, (start == -1) ? 0 : end)
424 , m_selectionStart(start), m_selectionEnd(end)
425 {
426 m_type = QAccessible::TextSelectionChanged;
427 }
428
429 ~QAccessibleTextSelectionEvent();
430
431 void setSelection(int start, int end) {
432 m_selectionStart = start;
433 m_selectionEnd = end;
434 }
435
436 int selectionStart() const { return m_selectionStart; }
437 int selectionEnd() const { return m_selectionEnd; }
438
439protected:
440 int m_selectionStart;
441 int m_selectionEnd;
442};
443
444class Q_GUI_EXPORT QAccessibleTextInsertEvent : public QAccessibleTextCursorEvent
445{
446public:
447 inline QAccessibleTextInsertEvent(QObject *obj, int position, const QString &text)
448 : QAccessibleTextCursorEvent(obj, position + int(text.size()))
449 , m_position(position), m_text(text)
450 {
451 m_type = QAccessible::TextInserted;
452 }
453 inline QAccessibleTextInsertEvent(QAccessibleInterface *iface, int position, const QString &text)
454 : QAccessibleTextCursorEvent(iface, position + int(text.size()))
455 , m_position(position), m_text(text)
456 {
457 m_type = QAccessible::TextInserted;
458 }
459
460 ~QAccessibleTextInsertEvent();
461
462 QString textInserted() const {
463 return m_text;
464 }
465 int changePosition() const {
466 return m_position;
467 }
468
469protected:
470 int m_position;
471 QString m_text;
472};
473
474class Q_GUI_EXPORT QAccessibleTextRemoveEvent : public QAccessibleTextCursorEvent
475{
476public:
477 inline QAccessibleTextRemoveEvent(QObject *obj, int position, const QString &text)
478 : QAccessibleTextCursorEvent(obj, position)
479 , m_position(position), m_text(text)
480 {
481 m_type = QAccessible::TextRemoved;
482 }
483 inline QAccessibleTextRemoveEvent(QAccessibleInterface *iface, int position, const QString &text)
484 : QAccessibleTextCursorEvent(iface, position)
485 , m_position(position), m_text(text)
486 {
487 m_type = QAccessible::TextRemoved;
488 }
489
490 ~QAccessibleTextRemoveEvent();
491
492 QString textRemoved() const {
493 return m_text;
494 }
495 int changePosition() const {
496 return m_position;
497 }
498
499protected:
500 int m_position;
501 QString m_text;
502};
503
504class Q_GUI_EXPORT QAccessibleTextUpdateEvent : public QAccessibleTextCursorEvent
505{
506public:
507 inline QAccessibleTextUpdateEvent(QObject *obj, int position, const QString &oldText, const QString &text)
508 : QAccessibleTextCursorEvent(obj, position + int(text.size()))
509 , m_position(position), m_oldText(oldText), m_text(text)
510 {
511 m_type = QAccessible::TextUpdated;
512 }
513 inline QAccessibleTextUpdateEvent(QAccessibleInterface *iface, int position, const QString &oldText, const QString &text)
514 : QAccessibleTextCursorEvent(iface, position + int(text.size()))
515 , m_position(position), m_oldText(oldText), m_text(text)
516 {
517 m_type = QAccessible::TextUpdated;
518 }
519
520 ~QAccessibleTextUpdateEvent();
521
522 QString textRemoved() const {
523 return m_oldText;
524 }
525 QString textInserted() const {
526 return m_text;
527 }
528 int changePosition() const {
529 return m_position;
530 }
531
532protected:
533 int m_position;
534 QString m_oldText;
535 QString m_text;
536};
537
538class Q_GUI_EXPORT QAccessibleValueChangeEvent : public QAccessibleEvent
539{
540public:
541 inline QAccessibleValueChangeEvent(QObject *obj, const QVariant &val)
542 : QAccessibleEvent(obj, QAccessible::InvalidEvent)
543 , m_value(val)
544 {
545 m_type = QAccessible::ValueChanged;
546 }
547 inline QAccessibleValueChangeEvent(QAccessibleInterface *iface, const QVariant &val)
548 : QAccessibleEvent(iface, QAccessible::InvalidEvent)
549 , m_value(val)
550 {
551 m_type = QAccessible::ValueChanged;
552 }
553
554 ~QAccessibleValueChangeEvent();
555
556 void setValue(const QVariant & val) { m_value= val; }
557 QVariant value() const { return m_value; }
558
559protected:
560 QVariant m_value;
561};
562
563class Q_GUI_EXPORT QAccessibleTableModelChangeEvent : public QAccessibleEvent
564{
565public:
566 enum ModelChangeType {
567 ModelReset,
568 DataChanged,
569 RowsInserted,
570 ColumnsInserted,
571 RowsRemoved,
572 ColumnsRemoved
573 };
574
575 inline QAccessibleTableModelChangeEvent(QObject *obj, ModelChangeType changeType)
576 : QAccessibleEvent(obj, QAccessible::InvalidEvent)
577 , m_modelChangeType(changeType)
578 , m_firstRow(-1), m_firstColumn(-1), m_lastRow(-1), m_lastColumn(-1)
579 {
580 m_type = QAccessible::TableModelChanged;
581 }
582 inline QAccessibleTableModelChangeEvent(QAccessibleInterface *iface, ModelChangeType changeType)
583 : QAccessibleEvent(iface, QAccessible::InvalidEvent)
584 , m_modelChangeType(changeType)
585 , m_firstRow(-1), m_firstColumn(-1), m_lastRow(-1), m_lastColumn(-1)
586 {
587 m_type = QAccessible::TableModelChanged;
588 }
589
590 ~QAccessibleTableModelChangeEvent();
591
592 void setModelChangeType(ModelChangeType changeType) { m_modelChangeType = changeType; }
593 ModelChangeType modelChangeType() const { return m_modelChangeType; }
594
595 void setFirstRow(int row) { m_firstRow = row; }
596 void setFirstColumn(int col) { m_firstColumn = col; }
597 void setLastRow(int row) { m_lastRow = row; }
598 void setLastColumn(int col) { m_lastColumn = col; }
599 int firstRow() const { return m_firstRow; }
600 int firstColumn() const { return m_firstColumn; }
601 int lastRow() const { return m_lastRow; }
602 int lastColumn() const { return m_lastColumn; }
603
604protected:
605 ModelChangeType m_modelChangeType;
606 int m_firstRow;
607 int m_firstColumn;
608 int m_lastRow;
609 int m_lastColumn;
610};
611
612class Q_GUI_EXPORT QAccessibleAnnouncementEvent : public QAccessibleEvent
613{
614public:
615 explicit QAccessibleAnnouncementEvent(QObject *object, const QString &message)
616 : QAccessibleEvent(object, QAccessible::InvalidEvent)
617 , m_message(message)
618 , m_politeness(QAccessible::AnnouncementPoliteness::Polite)
619 {
620 m_type = QAccessible::Announcement;
621 }
622
623 explicit QAccessibleAnnouncementEvent(QAccessibleInterface *iface, const QString &message)
624 : QAccessibleEvent(iface, QAccessible::InvalidEvent)
625 , m_message(message)
626 , m_politeness(QAccessible::AnnouncementPoliteness::Polite)
627 {
628 m_type = QAccessible::Announcement;
629 }
630
631 ~QAccessibleAnnouncementEvent() override;
632
633 QString message() const { return m_message; }
634 QAccessible::AnnouncementPoliteness politeness() const { return m_politeness; }
635 void setPoliteness(QAccessible::AnnouncementPoliteness politeness)
636 { m_politeness = politeness; }
637
638protected:
639 QString m_message;
640 QAccessible::AnnouncementPoliteness m_politeness;
641};
642
643#ifndef Q_QDOC
644#define QAccessibleInterface_iid "org.qt-project.Qt.QAccessibleInterface"
645Q_DECLARE_INTERFACE(QAccessibleInterface, QAccessibleInterface_iid)
646#endif
647
648Q_GUI_EXPORT const char *qAccessibleRoleString(QAccessible::Role role);
649Q_GUI_EXPORT const char *qAccessibleEventString(QAccessible::Event event);
650Q_GUI_EXPORT QString qAccessibleLocalizedActionDescription(const QString &actionName);
651
652#ifndef QT_NO_DEBUG_STREAM
653Q_GUI_EXPORT QDebug operator<<(QDebug d, const QAccessibleInterface *iface);
654Q_GUI_EXPORT QDebug operator<<(QDebug d, const QAccessibleEvent &ev);
655#endif
656
657QT_END_NAMESPACE
658
659#endif // QT_CONFIG(accessibility)
660#endif // QACCESSIBLE_H
QT_BEGIN_NAMESPACE Q_STATIC_LOGGING_CATEGORY(lcSynthesizedIterableAccess, "qt.iterable.synthesized", QtWarningMsg)