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的主要内容,如果未能解决你的问题,请参考以下文章
QSignalMapper 和 QAction 的问题永远不会触发 Slot