背景:我想动态创建上下文菜单的结构并将操作项的插槽传递给创建上下文菜单的方法。
实际的插槽位于 QWidget 类中。我通过传递函数指针尝试了不同的解决方案。但他们不编译。典型错误消息:“无法使用 'void (TextEdit::*)()' 类型的右值初始化 'void (*)()' 类型的参数”
这会编译,但不会触发所需的事件:
MenuBuilder builder(&parentMenu);
auto *subMenu = builder.createMenu(SECTION, this, SLOT(TextEdit::onInsertChars()));
以及对应的方法:
QMenu *MenuBuilder::createMenu(const MenuDescription &menuDescription,
const QObject *receiver, const char *target) {
...
inlineMenu->addAction(text, receiver, target);
...
}
我确信有一个明显的解决方案,但我无法弄清楚。
解决方案:在这种情况下,您必须通过SLOT(onInsertChars())
而不是SLOT(TextEdit::onInsertChars())
.