我试图通过嵌入在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()宏中传递的字符串必须包含插槽的名称及其参数类型。您不能直接传递参数值。因此,如果您的插槽接受int参数,则该语句将为SLOT(exportCase(int))

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

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

另请参见connect documentation

关于c++ - QTableWidget-QMenu上下文菜单-AddAction插槽未调用函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17241948/

10-11 02:27
查看更多