Qt, событие на пункте QMenuBar

172
16 августа 2018, 23:50

Имеется верхнее меню, в виде нескольких пунктов, где несколько пунктов меню представляют из себя кнопки, без вложенных пунктов. Полный код меню(имеется класс - окно, и у него в конструкторе все создается):

   MainWindow::MainWindow(const QString name): ui(new Ui::MainWindow)
   {
      ui->setupUi(this);
      this->setWindowTitle(name);
      menuBar()->addMenu(scan = new QMenu(tr("Сканировать")));
      menuBar()->addMenu(options = new QMenu(tr("Настройки")));
      menuBar()->addMenu(about = new QMenu(tr("О программе")));
      menuBar()->addMenu(info = new QMenu(tr("Использование")));
      QAction* action = menuBar()->addAction(tr("Выход"));
      connect(action, SIGNAL(triggered(bool)), this, SLOT(close()));
   }

Однако, это событие не срабатывает так, как нужно. При запуске,у приложения имеется кнопка выход, но при нажатии на ней открывается список подменю-элементов, где есть элемент "активировать", который не действителен. Как надо правильно сделать единичный пункт меню?

Answer 1

Используйте метод quit(). Метод close закроет текущий виджет и само приложение, если это был последний видимый виджет.

Пример использования:

QPushButton *quitButton = new QPushButton("Quit");
connect(quitButton, SIGNAL(clicked()), &app, SLOT(quit()));

Если &app недоступен вам в текущем контексте можно заменить его на макрос qApp:

...
connect(quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));
READ ALSO
Есть ли ресурс для практики на C++? [закрыт]

Есть ли ресурс для практики на C++? [закрыт]

Учусь писать на С++, и переодически, пройдя какую-то тему, приходится просто оставлять её в голове без практикиВ силу нехватки воображения,...

185
Страности с типом int в C++ [закрыт]

Страности с типом int в C++ [закрыт]

Начнём с того, что я ещё совсем "зелёный" в программированииИ тут на днях я баловался с С++

150
Динамическе и статические n-мерные массивы в С++

Динамическе и статические n-мерные массивы в С++

Похоже я не совсем понимаю что из себя представляют двумерные (n-мерные) массивы в C++, чем они являются для оперативной памяти и чем двумерный...

147
time: идентификатор не найден (ctime подрубил)

time: идентификатор не найден (ctime подрубил)

Начал учить C++ , написал маленький код

146