QMenu无法读取功能插槽

时间:2014-06-05 23:04:05

标签: c++ qt qtgui qtcore qt-signals

我的目的是创建一个上下文菜单,将单元格内容复制到剪贴板。在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());
}

我一直在查看官方文档几个小时,但没有发现任何相关信息。有一个解决方案吗?

1 个答案:

答案 0 :(得分:1)

来自documentation

  

信号和插槽机制是类型安全的:信号的签名必须与接收插槽的签名匹配。 (事实上​​,一个槽可能比它收到的信号具有更短的签名,因为它可以忽略额外的参数。)由于签名是兼容的,编译器可以帮助我们在使用基于函数指针的语法时检测类型不匹配。基于字符串的SIGNAL和SLOT语法将在运行时检测类型不匹配。

这是罪魁祸首:

menu.addAction(QString("Test Item"), this,
               SLOT(copyToClipboard(QTableWidget *, int,int)));

您不能拥有不匹配的信号槽参数。您只能将没有参数或一个布尔值的插槽连接到触发(bool)信号。你必须重新考虑你的设计。