Я пытаюсь вызвать функцию через контекстное меню, встроенное в QTablewidget. Он не вызывает функцию в слоте. Могу ли я что-то упустить? Контекстные меню появляются, но нажатие ничего не дает.
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));
}
ОБНОВИТЬ:
Слот без передаваемого параметра, похоже, работает, но не с параметрами
SLOT(exportCase(cell.row())))
не является действительным connect
аргумент. Строка передана в SLOT()
макрос должен содержать имя слота и типы его аргументов. Вы не можете передавать значения аргумента напрямую. Итак, если ваш слот принимает int
аргумент, заявление будет SLOT(exportCase(int))
,
Более того, вы не можете подключить сигнал к слоту с несовпадающими аргументами. QMenu::addAction
подключает ваш слот к QAction::triggered(bool)
сигнал. Таким образом, вы можете использовать только слот без аргументов или слот с одним bool
аргумент.
Любое время выполнения connect
проблемы могут быть обнаружены с помощью возвращаемого значения connect()
, Вам лучше проверить это, если вы испытываете некоторые проблемы. Кроме того, автозаполнение Qt Creator может помочь вам использовать SIGNAL()
а также SLOT()
макросы.
Смотрите также подключить документацию.
Других решений пока нет …