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

如何获得禁用的 QAction 元素的触发信号?

在不丢失默认信号参数的情况下将额外参数传递给 PyQt 插槽

将视图作为参数传递给按钮,将其作为模态触发

如何将用户输入参数传递给我的云函数?

PostgreSQL - 如何将函数的参数传递给触发器?