QAction触发信号将参数传递给Slot

时间:2017-03-01 02:30:17

标签: qt

所以说我有这个QDataTable是QTableWidget

QAction* copyDataAction = new QAction("Copy Data");
DataTable->addAction(copyDataAction);
connect(copyDataAction, SIGNAL(triggered()), this, SLOT(CopyTableData()));

这很好,并且调用了CopyTableData插槽,但是我想要将DataTable引用到CopyTableData(),这样CopyTableData可以是通用的,我可以传递任何我想要的QTableWidget *指针。

如果我这样做

connect(copyDataAction, SIGNAL(triggered()), this, SLOT(CopyTableData(DataTable))); 

显然,插槽永远不会被调用,我觉得这是一个简单的问题,我只是不知道我错过了什么。

2 个答案:

答案 0 :(得分:0)

试试这个:

http://doc.qt.io/qt-4.8/qobject.html#sender

connect(copyDataAction, SIGNAL(triggered()), this, SLOT(CopyTableData()));

void Myclass::CopyTableData()
{
   DataTable* td = qobject_cast<DataTable *>(QObject::sender());
   if(td)
   {
      ...
   }
}

答案 1 :(得分:0)

解决方案是使用具有相同输入量的lambda函数,以便信号正确触发,但使用它来本地传递我想要的函数的dataTable。

connect(copyDataAction, &QAction::triggered, this, [=](){
        CopyTableData(DataTable);
    });