Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
Audit Qt Widget and Qt Quick applications for accessibility compliance. This skill checks QAccessible interface implementations, keyboard navigation, screen reader compatibility, and WCAG guidelines adherence.
Capabilities
Audit QAccessible interface implementations
Check keyboard navigation and focus handling
Verify screen reader compatibility
Validate high contrast and color accessibility
Check text scaling support
Review accessible names and descriptions
Test with platform accessibility tools
Generate accessibility compliance reports
Input Schema
{"type":"object","properties":{"projectPath":{"type":"string","description":"Path to the Qt project"},"auditLevel":{"enum":["basic","wcag-a","wcag-aa","wcag-aaa"],"default":"wcag-aa"},"targetPlatform":{"enum":["windows","macos","linux"],"description":"Platform to focus accessibility checks"},"checkCategories":{"type":"array","items":{"enum":["keyboard","screen-reader","visual","focus","labels","navigation"]},"default":["keyboard","screen-reader","visual","focus","labels"]},"includeQml":{"type":"boolean","default":true}},"required":["projectPath"]}
// Check: Widget has accessible nameboolhasAccessibleName(QWidget* widget){
return !widget->accessibleName().isEmpty() ||
!widget->accessibleDescription().isEmpty();
}
// Check: Custom widget implements QAccessibleInterfaceclassCustomWidget : public QWidget {
// Must implement for screen readersQAccessibleInterface* accessibleInterface(){
return QAccessible::queryAccessibleInterface(this);
}
};
Keyboard Navigation
// Check: All interactive widgets are focusablevoidauditFocusPolicy(QWidget* widget){
if (isInteractive(widget)) {
if (widget->focusPolicy() == Qt::NoFocus) {
reportIssue("Interactive widget not focusable", widget);
}
}
}
// Check: Tab order is logicalvoidauditTabOrder(QWidget* container){
QList<QWidget*> tabOrder = getTabOrder(container);
// Verify left-to-right, top-to-bottom order
}
Visual Accessibility
// Check: Sufficient color contrastboolhasAdequateContrast(QColor foreground, QColor background){
double ratio = calculateContrastRatio(foreground, background);
return ratio >= 4.5; // WCAG AA for normal text
}
// Check: Text is scalablevoidauditFontScaling(QWidget* widget){
QFont font = widget->font();
if (font.pixelSize() > 0) {
reportIssue("Use point size instead of pixel size", widget);
}
}
Common Issues
Missing Accessible Names
// BAD: No accessible name
QPushButton* btn = newQPushButton(QIcon(":/save.png"), "");
// GOOD: Has accessible name
QPushButton* btn = newQPushButton(QIcon(":/save.png"), "");
btn->setAccessibleName(tr("Save"));
btn->setAccessibleDescription(tr("Save the current document"));
Non-Focusable Controls
// BAD: Custom control not focusable
CustomControl* ctrl = newCustomControl();
ctrl->setFocusPolicy(Qt::NoFocus);
// GOOD: Focusable with keyboard support
CustomControl* ctrl = newCustomControl();
ctrl->setFocusPolicy(Qt::StrongFocus);
Insufficient Contrast
// BAD: Low contrast text
label->setStyleSheet("color: #888888; background: white;");
// GOOD: WCAG AA compliant contrast
label->setStyleSheet("color: #595959; background: white;");
// Verify with Windows Narrator// Use Accessibility Insights toolvoidtestWithUIAutomation(){
// Check UI Automation tree// Verify all controls have automation IDs
}
macOS (VoiceOver)
// Verify with VoiceOver// Check NSAccessibility compliancevoidtestWithVoiceOver(){
// Check accessibility hierarchy// Verify labels are announced correctly
}
Linux (Orca/AT-SPI)
// Verify with Orca screen reader// Use Accerciser for AT-SPI inspectionvoidtestWithATSPI(){
// Check AT-SPI tree// Verify accessible events
}
WCAG Guidelines Mapping
WCAG Criterion
Qt Implementation
1.1.1 Non-text Content
setAccessibleName() for images/icons
1.4.3 Contrast
QPalette with sufficient contrast
2.1.1 Keyboard
setFocusPolicy(), key handlers
2.4.3 Focus Order
setTabOrder()
2.4.7 Focus Visible
Focus indicators in stylesheet
4.1.2 Name, Role, Value
QAccessible interface
Best Practices
Set accessible names: All interactive widgets need names
Use semantic roles: Proper QAccessible::Role
Support keyboard: All features accessible via keyboard