C++ QTableWidget-QMenu上下文菜单-AddAction插槽不调用函数

C++ QTableWidget-QMenu上下文菜单-AddAction插槽不调用函数,c++,qt,contextmenu,qtablewidget,qmenu,C++,Qt,Contextmenu,Qtablewidget,Qmenu,我试图通过嵌入QTablewidget中的上下文菜单调用函数。它不调用插槽中的函数。我会错过什么吗?上下文菜单确实会出现,但单击不会执行任何操作 QMenu *contextMenu = new QMenu; QModelIndex cell = ui->tableWidget->indexAt(pos); if(cell.isValid()) { contextMenu->addAction("Burn Case",

我试图通过嵌入QTablewidget中的上下文菜单调用函数。它不调用插槽中的函数。我会错过什么吗?上下文菜单确实会出现,但单击不会执行任何操作

    QMenu *contextMenu = new QMenu;
    QModelIndex cell = ui->tableWidget->indexAt(pos);

    if(cell.isValid())

    {
            contextMenu->addAction("Burn Case", this, SLOT(burnCase()));

            contextMenu->addAction("Export Case", this, SLOT(exportCase(cell.row())));

            contextMenu->addAction("Delete Case", this, SLOT(deleteCase(cell.row())));

            contextMenu->exec(ui->tableWidget->mapToGlobal(pos));
    }
更新:

未传递参数的插槽似乎正在工作,但带有参数的插槽(exportCase(cell.row())无效。在
SLOT()
宏中传递的字符串必须包含插槽的名称及其参数类型。不能直接传递参数值。因此,如果插槽接受
int
参数,则语句将是
slot(exportCase(int))

更重要的是,不能将信号连接到参数不匹配的插槽
QMenu::addAction
将插槽连接到
QAction::triggered(bool)
信号。因此,您只能使用不带参数的插槽,或者使用带单个
bool
参数的插槽

可以使用
connect()
的返回值检测任何运行时
connect
问题。如果您遇到一些问题,最好检查一下。此外,Qt Creator的自动完成功能可以帮助您使用
SIGNAL()
SLOT()

另见