I want a contextmenu on the cells in my QTableView, so first I connected:
connect(ui->tblTimesheet,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(sheetContextMenu(const QPoint &)));
And the slot for that connect is below:
void wndMyWindow::sheetContextMenu(const QPoint &pos){
QMenu *menu = new QMenu;
QModelIndex cell = ui->tblTimesheet->indexAt(pos);
// Make sure the right click occured on a cell!
if(cell.isValid()){
QString myid=cell.sibling(cell.row(),0).data().toString();
menu->addAction("Remove item", this, SLOT(sheetRemoveItem()));
menu->exec(ui->tblTimesheet->mapToGlobal(pos));
}
}
Which creates the menu and puts an action in the menu which calls a function when that action is clicked. However, I want to pass through the variable myid into the second slot. That slot is listed below:
void wndMyWindow::sheetRemoveItem(){
qDebug("Sure I'm here, but what info do I have?");
return;
}
I’m not quite sure how to do this, can anyone help?
In this regard, Qt signals/slots suck compared to callbacks and other signal/slot mechanisms. You really can’t attach extra information.
Couple things you can do though:
Create an object that stores the information you want to send, give it a slot and attach to the signal you want to respond to, emit a new signal with the information, attach to that signal.
Use the Qt signal map thingy to attach some small variation of data to a signal.
You can get the sender in a Qt slot. This may be the information you need. (see the Qt docs on signals/slots).
If none of those methods work for you, sorry to say but, you’re pretty much fscked. I’m working on a method to auto-create #1 and attach to a boost::signal, which would be more powerful, but it’s going to require a lot of hard work because Qt is incompatible with the C++ preprocessor and with templates.
Good luck.