Простое меню с использованием Qt4 - PullRequest
0 голосов
/ 28 апреля 2010

Я пытаюсь сделать простой графический интерфейс с QT 4.6. я сделал отдельный класс, который представляет строку меню:

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 со слотом quit основного приложения, вероятно, потому что он не виден из класса MenuBar ..

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

как я могу это сделать?

Ответы [ 3 ]

5 голосов
/ 28 апреля 2010

Используйте static instance() метод класса QApplication или qApp макрос , чтобы получить указатель на экземпляр приложения. Обратите внимание, что это указатель, поэтому передайте qApp в connect(), а не &qApp.

3 голосов
/ 29 апреля 2010

У вас есть опечатка. :)

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

Имя переменной - qApp, а не QApp. Кроме этого, Бальфа сказал все это. Так что либо:

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

0 голосов
/ 28 апреля 2010
  1. Вы можете сделать вашу переменную quitAct общедоступной в классе MenuBar, а затем из класса главного окна подключить menuBar-> quitAct к вашей функции quit (), например

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

  2. Вы можете создать открытый SIGNAL в классе MenuBar, например, quitSignal (), а из основного окна / класса диалога подключить его к функции quit (), когда этот сигнал испускается.

  3. Вы не можете использовать код класса MenuBar для вашего окна или класса диалогового окна, а просто поместить все это в одну функцию, например:

    void createMenuBar () { ... }

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...