簡體   English   中英

QAction觸發信號將參數傳遞到插槽

[英]QAction Triggered Signal to pass parameter to Slot

所以說我有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))); 

顯然,插槽從未被調用,我覺得這是一個簡單的問題,我只是不知道自己缺少什么。

嘗試這個:

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

解決方案是使用具有相同數量輸入的lambda函數,以便信號將正確觸發,但使用該函數將我想要的dataTable本地傳遞給該函數。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM