我的目的是创建一个上下文菜单,将单元格内容复制到剪贴板。在sender()的帮助下,我能够将相同的功能连接到两个不同的QTableWidget。一切正常,除了此错误消息:
" QObject :: connect:不兼容的发送方/接收方参数 QAction :: triggered(bool) - >主窗口:: copyToClipboard(QTableWidget的*,INT,INT)"
这是生成错误的代码部分
void MainWindow::ProvideContextMenu(const QPoint& pos) // this is a slot
{
QTableWidget *tw = (QTableWidget *)sender();
int row = tw->currentRow();
int col = tw->currentColumn();
QMenu menu;
menu.addAction(QString("Test Item"), this,
SLOT(copyToClipboard(QTableWidget *, int,int)));
menu.exec(tw->mapToGlobal(pos));
}
void MainWindow::copyToClipboard(QTableWidget *tw, int row, int col) {
clipboard = QApplication::clipboard();
clipboard->setText(tw->item(row, col)->text());
}
我一直在查看官方文档几个小时,但没有发现任何相关信息。有一个解决方案吗?
答案 0 :(得分:1)
信号和插槽机制是类型安全的:信号的签名必须与接收插槽的签名匹配。 (事实上,一个槽可能比它收到的信号具有更短的签名,因为它可以忽略额外的参数。)由于签名是兼容的,编译器可以帮助我们在使用基于函数指针的语法时检测类型不匹配。基于字符串的SIGNAL和SLOT语法将在运行时检测类型不匹配。
这是罪魁祸首:
menu.addAction(QString("Test Item"), this,
SLOT(copyToClipboard(QTableWidget *, int,int)));
您不能拥有不匹配的信号槽参数。您只能将没有参数或一个布尔值的插槽连接到触发(bool)信号。你必须重新考虑你的设计。