Мне нужно сделать приложение Qt совместимым с программами чтения с экрана, такими как Jaws или NVDA (в настоящее время я использую NVDA для своих тестов).Для общих компонентов, таких как метки или кнопки, все работает нормально, и даже мои чистые графические компоненты, такие как кнопки изображений, работают, как и ожидалось, до тех пор, пока я использую свойство availableName.
Но мой интерфейс также содержит сетку QTableWidget,в котором я добавляю или удаляю пользовательские ячейки виджета динамически во время выполнения.Каждый из этих виджетов содержит изображение и текст, который я хочу прочитать с помощью программы чтения с экрана.
Однако программа чтения с экрана ничего не говорит, покаЯ парю клетки.И когда я нажимаю на них, вместо текста, содержащегося в ячейке, произносится номер столбца и строки.
Я попытался поэкспериментировать со свойствами специальных возможностей, например, с помощью параметра visibleName метки виджета илиСам виджет, но никто не работал.Номера строк и столбцов по-прежнему читаются вместо текста, который я хочу, независимо от содержимого, заданного в свойстве availableName.
Так что же мне следует применять для чтения текста, содержащегося в моих ячейках?
Вот код, который я использую для добавления новой ячейки в сетку:
void MainForm::OnAddClicked()
{
const int row = (m_CellCount / 7);
const int column = (m_CellCount % 7);
// add a new line if required
m_UI.twGridView->setRowCount(row + 1);
QString text;
QFont font("Segoe UI", 14);
QFontMetrics metrics(font);
std::unique_ptr<QLabel> pImage(new QLabel());
switch (m_CellCount % 3)
{
case 0:
{
text = metrics.elidedText("This is a very very long device name", Qt::ElideRight, m_UI.twGridView->columnWidth(column) - 10);
pImage->setStyleSheet("image: url(resources/images/Device.png) center center;");
break;
}
case 1:
text = metrics.elidedText("iPod Shuffle Robbie", Qt::ElideRight, m_UI.twGridView->columnWidth(column) - 10);
pImage->setStyleSheet("image: url(resources/images/Shuffle.png) center center;");
break;
case 2:
text = metrics.elidedText("iPad Robbie", Qt::ElideRight, m_UI.twGridView->columnWidth(column) - 10);
pImage->setStyleSheet("image: url(resources/images/iPad.png) center center;");
break;
}
std::unique_ptr<QLabel> pLabel(new QLabel(text));
pLabel->setFixedHeight(20);
pLabel->setAlignment(Qt::AlignLeft | Qt::AlignBottom);
pLabel->setFont(font);
pLabel->setStyleSheet("color: rgb(243, 243, 243);");
pLabel->setAccessibleName("The widget's label content is read"); // doesn't work
std::unique_ptr<QWidget> pWidget(new QWidget());
std::unique_ptr<QVBoxLayout> pLayout(new QVBoxLayout(pWidget.get()));
pLayout->addSpacing(10);
pLayout->addWidget(pImage.get());
pLayout->addSpacing(10);
pLayout->addWidget(pLabel.get());
pWidget->setLayout(pLayout.get());
pWidget->setStyleSheet("background: none;");
pImage.release();
pLabel.release();
pLayout.release();
pWidget->setAccessibleName("The widget content is read"); // doesn't work
m_UI.twGridView->setCellWidget(row, column, pWidget.get());
pWidget.release();
++m_CellCount;
}