Как получить доступ к 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()
метод.