2013-06-21 56 views
0

我試圖通過嵌入QTablewidget內的上下文菜單調用一個函數。它不調用插槽中的功能。我能錯過什麼嗎?上下文菜單確實出現,但點擊不做任何事情。QTableWidget - QMenu上下文菜單 - AddAction插槽不調用函數

QMenu *contextMenu = new QMenu; 
    QModelIndex cell = ui->tableWidget->indexAt(pos); 

    if(cell.isValid()) 

    { 
      contextMenu->addAction("Burn Case", this, SLOT(burnCase())); 

      contextMenu->addAction("Export Case", this, SLOT(exportCase(cell.row()))); 

      contextMenu->addAction("Delete Case", this, SLOT(deleteCase(cell.row()))); 

      contextMenu->exec(ui->tableWidget->mapToGlobal(pos)); 
    } 

UPDATE:

槽沒有參數被傳遞似乎是工作,但不能與參數

回答

2

SLOT(exportCase(cell.row())))的那些無效connect參數。在SLOT()宏中傳遞的字符串必須包含插槽的名稱及其參數類型。您無法直接傳遞參數值。所以,如果您的插槽接受int參數,則聲明將爲SLOT(exportCase(int))

此外,您不能將信號連接到具有不匹配參數的插槽。 QMenu::addAction將您的插槽連接到QAction::triggered(bool)信號。所以你只能使用一個沒有參數的插槽,或者只有一個參數爲bool的插槽。

任何運行時間connect問題都可以使用返回值connect()進行檢測。如果遇到一些問題,最好檢查一下。此外,Qt Creator的自動完成可以幫助您使用SIGNAL()SLOT()宏。請參閱connect documentation

+0

謝謝,我可以解決它。 – rreeves