0

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

更新:

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

4

1 回答 1

2

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

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

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

另请参阅连接文档

于 2013-06-21T19:30:12.033 回答