QtMenubar Call Slot

时间:2011-12-30 00:46:27

标签: c++ qt qmenubar

这是在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()函数。我做错了什么?

1 个答案:

答案 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();
}

当然,如果您在该课程之外创建菜单,则需要公开该插槽,但这是另一个问题