QtMenubar Call Slot

QtMenubar Call Slot

本文关键字:Slot Call QtMenubar      更新时间:2023-10-16

这是在一个Menu类中。问题在于addAction。这可以工作,但是没有连接到slot:

QMenu* menu2 = new QMenu("Test");
menu2->addAction("Test");

当我这样做时:

QMenu* menu2 = new QMenu("Test");
menu2->addAction("Test", Menu, test);

我得到编译错误:"error: expected primary-expression before ',' token"

我的意思是在Menu类中调用test()函数。我做错了什么?

这个错误来自于传递Menu作为参数。你说Menu是一个类,而类本身并不是表达式。

如果您需要在Menu的实例上调用test,其中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();
}

当然,如果您在该类之外创建菜单,则需要将插槽设为公共,但这是另一个问题