Как получить доступ к QAction с помощью библиотеки QtTest?

У меня есть всплывающее меню в QTableWidget (ResultTable). В конструкторе моего класса я установил политику контекстного меню:

resultTable->setContextMenuPolicy(Qt::CustomContextMenu);
connect(resultTable, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(popUpMenuResultTable(QPoint)));

popUpMenuResultTable функция:

void MyClass::popUpMenuResultTable(QPoint pos)
{
    QMenu menu;
    QAction* actionExport = menu.addAction(QIcon(":/new/prefix1/FileIcon.png"), tr("Export"));
    connect(actionExport, SIGNAL(triggered()), this, SLOT(exportResultsTable()));
    menu.popup(pos);
    menu.exec(QCursor::pos());
}

Теперь мне нужно реализовать функцию для тестирования моего GUI с использованием библиотеки QtTest.

Как я могу получить тот же результат, что и пользователь, щелкнув правой кнопкой мыши по моей таблице результатов? В основном мне нужно получить доступ к actionExport (QAction) и вызвать его.

Например:

введите описание изображения здесь

Я уже попробовал:

QTest::mouseClick(resultTable, Qt::RightButton, Qt::NoModifier, pos, delay);

но это не показывает QMenu,

Я использую Qt 5.3.2.

1 ответ

Может быть, не совсем то, что вам нужно, а альтернативный подход, который легче проверить.

Вместо того, чтобы создавать меню вручную, вы регистрируете действия с виджетами и используете Qt::ActionContextMenu:

// e.g. in the widget's constructor
resultTable->setContextMenuPolicy(Qt::ActionsContextMenu);

QAction* actionExport = menu.addAction(QIcon(":/new/prefix1/FileIcon.png"), tr("Export"));
connect(actionExport, SIGNAL(triggered()), this, SLOT(exportResultsTable()));
resultTable->addAction(actionExport);

Затем вы либо добавляете аксессор к вашему виджету, который возвращает resultTable->actions() или просто сделать actionExport член вашего класса. Как только ваш тестовый код имеет доступ к действию, он может просто вызвать его триггер trigger() метод.

Другие вопросы по тегам