这是在Menu类中。问题是addAction。这有效,但没有与插槽的连接:
QMenu* menu2 = new QMenu("Test");
menu2->addAction("Test");
当我这样做时:
QMenu* menu2 = new QMenu("Test");
menu2->addAction("Test", Menu, test);
我收到编译错误:“错误:在','token'之前预期的primary-expression
我的意思是在Menu类中调用test()
函数。我做错了什么?
答案 0 :(得分:2)
嗯,错误来自传递Menu
作为参数。你说Menu
是一个类,而类本身不是表达式。
如果您需要在test
的实例上调用Menu
,其中Menu
不是QObject
的衍生物(即没有可用的广告位),那么您可以只需在窗口小部件中创建一个包含QMenu
本身(可能是QMainWindow
)的插槽,然后在那里实现调用!
编辑:添加示例。
class MainWindow : public QMainWindow {
Q_OBJECT
// Usual declarations...
private slots:
void myCustomSlot();
};
现在,假设您正在构造函数中填充主窗口:
MainWindow::MainWindow(...) {
// Some initialization code
QMenu *menu2 = new QMenu("Test");
menu2->addAction("Test", this, SLOT(myCustomSlot));
// Some more initialization code
}
// ...
void MainWindow::myCustomSlot() {
instanceOfMenu->test();
}
当然,如果您在该课程之外创建菜单,则需要公开该插槽,但这是另一个问题