2016-10-28 18 views
0

У меня есть всплывающее меню в QTableWidget (resultTable). В конструкторе моего класса я установить политику контекстного меню:Как получить доступ к QAction с помощью библиотеки QtTest?

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 LIB.

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

Например:

enter image description here

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

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

но не показывает QMenu.

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

+0

Вы пробовали отправить событие контекстного меню в виджет? I.e. создавая 'QContextMenuEvent' и отправляя его с помощью' QCoreApplication :: sendEvent() 'или' QCoreApplication :: postEvent() ' –

+0

Нет, я не пробовал. Можете ли вы привести краткий пример того, как я могу это сделать? Спасибо за помощь. – KelvinS

ответ

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().

 Смежные вопросы

  • Нет связанных вопросов^_^