私のQTableViewのセルにcontextmenuが必要なので、最初に接続しました:Qt/C++:QTableViewコンテキストメニューと情報を渡す
connect(ui->tblTimesheet,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(sheetContextMenu(const QPoint &)));
そしてその接続のスロットは以下の通りです:
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));
}
}
これはメニューを作成し、そのアクションがクリックされたときに関数を呼び出すメニュー。しかし、変数myidを2番目のスロットに渡したいと思います。そのスロットは以下の通りです:
void wndMyWindow::sheetRemoveItem(){
qDebug("Sure I'm here, but what info do I have?");
return;
}
これを行う方法がわかりません。
ええ、私は周りを見回しましたが、特定のウィジェットで何らかのアクションを実行できるようにするためにコンテキストメニューの全体的なポイントがないので、かなり愚かなようです。グローバルなアクションが必要な場合は、通常のメニューや他のタイプのインターフェースウィジェットを使用します。私が行ったことは、自分のフォームにプライベートメンバーを与えることでした。QModelIndex lastCellRightClicked;空のwndMyWindow :: sheetContextMenu(const QPoint&pos)スロットに設定し、それをvoid wndMyWindow :: sheetRemoveItem()スロットで使用します。 Good Enough™。 – Joseph
特定のメニュー項目に対して特定のものを実装したい場合は、その項目のQActionにアタッチするだけです。 –