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

Posted

技术标签:

【中文标题】QAction 触发信号将参数传递给 Slot【英文标题】:QAction Triggered Signal to pass parameter to Slot 【发布时间】:2017-03-01 02:30:16 【问题描述】:

所以说我有这个 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))); 

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

试试这个:

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)
   
      ...
   

【讨论】:

以上是关于QAction 触发信号将参数传递给 Slot的主要内容,如果未能解决你的问题,请参考以下文章