我正在尝试使用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()));
我该怎么做?
答案 0 :(得分:5)
使用QApplication
类的static instance()
method或qApp
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)
您可以在MenuBar类中将quitAct变量设为public,然后从主窗口类connect menuBar-> quitAct到quit()函数,如
connect(menuBar-> quitAct,SIGNAL(clicked()),this,SLOT(quit()));
您可以在MenuBar类中创建公共SIGNAL,例如quitSignal(),并在主窗口/对话框类中将此信号发出时将其连接到quit()函数。
您不能在主窗口/对话框类之外使用MenuBar类代码,只需将它们全部放在一个函数中,例如:
void createMenuBar(){ ... }