2017-03-01 67 views
0

所以說,我有這個地方QDataTable是QTableWidget的的QAction觸發信號傳遞參數給插槽

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

能正常工作和CopyTableData插槽被調用,而是說我希望得到一個參照數據表來CopyTableData (),以便CopyTableData可以是泛型的,我可以傳遞任何我想要的QTableWidget *指針。

,如果我做

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

顯然插槽不會被調用,我覺得這是一個簡單的問題,我只是不知道我在想念。

回答

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

的解決方案是使用lambda函數具有相同量的輸入,從而使該信號將正確觸發,但用它來在本地通過數據表即我想要的功能。

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