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



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

更新:

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

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

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

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

另请参阅连接文档。

相关内容

  • 没有找到相关文章

最新更新