我试图通过嵌入在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/