четверг, 2 февраля 2023 г.

Лямбды в connect() (сигнал/слот).

 Предположим, на форме есть кнопка QPushButton pbRestart, по нажатию которой должен быть исполнен какой-то метод объекта формы. 

Достаточно в качестве слота указать лямбду:

connect(ui->pbRestart, &QPushButton::clicked, this, [this](){ restart(); }); // Крутяк

    Параметры:

  1. ui->pbRestart - ссылка на источник сигнала clicked.
  2. &QPushButton::clicked - ссылка на метод, объявленный в классе источника.
  3. this т.н. "контекст". На самом деле, параметр необязателен. Компилятор выдаст предупреждение, но пропустит. Польза от него в том, что перед передачей сигнала в лямбду, Qt система проверит существование объекта контекста. Если он был удален, то код в лямбде вызван не будет. Если контекст получателя не существует, сообщение даже не будет поставлено в очередь. Напомню, что если нить объекта контекста не совпадает с нитью эмиттера сигнала, такой сигнал будет поставлен в очередь объекта нити-приемника. Безопасность! 
  4. [this](){ restart(); } - само тело лямбды. Здесь в лямбду передается захваченная копия указателя this/


Комментариев нет:

Отправить комментарий

QSettings: работа с ini файлом, русские символы.

  QSettings работает в т.ч. и с ini файлами. Локальные (русские, например) символы обрабатываются с помощью кодеков. Наверное, ini файл сле...