2017-03-01 3 views
0

sagen, dass ich das, wo QDataTable ist ein QTableWidgetQAction Triggered Signal Parameter zu übergeben So an Slot

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

Dies funktioniert gut und die CopyTableData Slot aufgerufen wird, aber sagen, dass ich einen Verweis auf Datatable CopyTableData bekommen wollte(), so dass CopyTableData generisch sein könnte und ich jeden QTableWidget * Zeiger übergeben könnte, den ich möchte.

Wenn ich tun

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

Offensichtlich ist der Schlitz nie aufgerufen wird, ich mag dieses Gefühl, ein einfaches Problem ist, ich weiß nur nicht, was im fehlt.

Antwort

0

Dies versuchen:

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

die Lösung eine Lambda-Funktion mit der gleichen Menge von Eingängen zu verwenden, war so, daß das Signal richtig ausgelöst wird, aber das verwenden, um lokal die Datatable übergeben, Ich möchte zur Funktion.

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