1

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());
}

现在,我需要实现一个函数来使用QtTest库测试我的 GUI。

如何通过右键单击我的resultTable来产生与用户相同的结果?基本上,我需要访问actionExport( QAction) 并触发它。

例如:

在此处输入图像描述

我已经尝试过:

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

但它没有显示QMenu.

我正在使用 Qt 5.3.2。

4

1 回答 1

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()方法。

于 2016-10-31T17:25:42.443 回答