使用Qt4的简单菜单栏

时间:2010-04-28 11:25:06

标签: c++ qt qt4

我正在尝试使用QT 4.6创建一个简单的GUI。我创建了一个代表菜单栏的separete类:

MenuBar::MenuBar()
{
    aboutAct = new QAction(tr("&About QT"), this);
    aboutAct->setStatusTip(tr("Show the application's About box"));
    connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));

    quitAct = new QAction(tr("&Quit"),this);
    quitAct->setStatusTip(tr("Exit to the program"));
    //connect(quitAct, SIGNAL(triggered()), &QApp, SLOT(quit()));

    menuFile = new QMenu("File");
    menuFile->addAction(quitAct);

    menuLinks = new QMenu("Links");

    menuAbout = new QMenu("Info");
    menuAbout->addAction(aboutAct);


    addMenu(menuFile);
    addMenu(menuLinks);
    addMenu(menuAbout);
}

我无法将quitAct的信号与主应用程序的退出槽连接,因为它在MenuBar类中是不可见的。

//connect(quitAct, SIGNAL(triggered()), &QApp, SLOT(quit()));

我该怎么做?

3 个答案:

答案 0 :(得分:5)

使用QApplication类的static instance() methodqApp macro获取指向应用程序实例的指针。请注意,这是一个指针,因此将qApp传递给connect(),而不是&qApp

答案 1 :(得分:3)

你有一个错字。 :)

在:connect(quitAct, SIGNAL(triggered()), &QApp, SLOT(quit()));

变量的名称是qApp,而不是QApp。除此之外,balpha说了这一切。所以它是:

connect(quitAct, SIGNAL(triggered()), qApp, SLOT(quit()));

connect(quitAct, SIGNAL(triggered()), QApplication::instance(), SLOT(quit()));

答案 2 :(得分:0)

  1. 您可以在MenuBar类中将quitAct变量设为public,然后从主窗口类connect menuBar-> quitAct到quit()函数,如

    connect(menuBar-> quitAct,SIGNAL(clicked()),this,SLOT(quit()));

  2. 您可以在MenuBar类中创建公共SIGNAL,例如quitSignal(),并在主窗口/对话框类中将此信号发出时将其连接到quit()函数。

  3. 您不能在主窗口/对话框类之外使用MenuBar类代码,只需将它们全部放在一个函数中,例如:

    void createMenuBar(){    ... }

  4. 祝你好运。