QTableWidget - QMenu上下文菜单 - 不调用函数的AddAction槽

时间:2013-06-21 18:24:51

标签: c++ qt contextmenu qtablewidget qmenu

我正试图通过嵌入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));
    }

更新

没有传递参数的插槽似乎正在工作,但没有带参数的插槽

1 个答案:

答案 0 :(得分:2)

SLOT(exportCase(cell.row())))无效connect参数。在SLOT()宏中传递的字符串必须包含插槽的名称及其参数类型。您不能直接传递参数值。因此,如果您的插槽接受int参数,则该语句将为SLOT(exportCase(int))

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

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

另见connect documentation