2013-06-21 2 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