Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
3 / 3 / 0
Регистрация: 12.07.2022
Сообщений: 216

Приконнектить сигнал к методу объекта

09.02.2025, 00:12. Показов 5517. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем! Есть сигнал от кнопки, нужно чтобы при нажатии вызывался один из методов моего объекта (обычный объект, а не QObject). Метод без параметров. Делаю через эту перегрузку функции connect:

C++
1
QObject::connect(button, &QAbstractButton::clicked, someFunction);
Передавал метод в виде лямбды (с захватом объекта по ссылке), работает, но возникает варнинг (мол, объект может быть уже мёртв), хотелось бы чтобы без них было (и на стандартных настройках). Делал костыль, объявляя обычную функцию, которая дёргает нужный метод у объекта, но это уродство. Как сделать наиболее правильно и без варнингов?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.02.2025, 00:12
Ответы с готовыми решениями:

Стоит ли создавать новый объект который будет производить "распределение" сигналов и слотов?
Сейчас объясню что я имею ввиду. Допустим есть много много различных классов. Может будет лучше если создать ещё один класс с различными...

Связать сигнал еще не существующего объекта со слотом
connect(progress, SIGNAL(close()), SLOT(showHidden()));В конструкторе MainWindow хочу связать сигнал еще не созданного виджета...

QT GraphicsItem - передать сигнал в MainWindow чтобы на лейбле менялось значение при нажатии мишкой на графический объект
С помощью вот этого примера сделал кнопку http://www.youtube.com/watch?v=hgDd2QspuDg Хочу передать сигнал в MainWindow чтобы на...

22
86 / 60 / 12
Регистрация: 06.06.2013
Сообщений: 216
10.02.2025, 20:32
Студворк — интернет-сервис помощи студентам
До лямбд для подключения нескольких кнопок к слоту со счетчиком в более древних Кутях пользовались QSignalMapper, но он выглядит более громоздко и менее элегантно, чем лямбда.
0
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
10.02.2025, 22:53
Лучший ответ Сообщение было отмечено Geek Geekson как решение

Решение

Цитата Сообщение от Geek Geekson Посмотреть сообщение
Работает, но варнинг на коннекте. Как его обойти? Доступ к объекту aaa должен быть ссылочный.
Можно использовать std::bind(&abc::chirik, &aaa) вместо лямбды, предварительно удостоверившись, что дисконнект произойдет раньше, чем помрёт aaa.

Добавлено через 6 минут
Цитата Сообщение от Anvis Посмотреть сообщение
пользуясь случаем, как раз уточню для себя еще один момент. В процессе работы программы в отдельном потоке создаю наследников QObject, коннекчу их к виджетам в главном и после отработки run() удаляю через delete. Я правильно понимаю, что никаких дополнительных действий я не должен предпринимать?
Честно говоря не понятно что там и как создаётся. Но если преположить, что сделано всё без странностей, то да, не должен.

Добавлено через 25 минут
Добавлю пример, а то автор чтота не реагирует, хотя ответ мой видел (может не понял, хз)
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <QApplication>
#include <QPushButton>
#include <functional>
 
struct abc
{
    void chirik()
    {
        qDebug("chirik!");
    }
};
 
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
 
    abc aaa;
 
    QWidget topw;
    QPushButton *btn = new QPushButton("", &topw);
 
    QObject::connect(btn, &QAbstractButton::clicked, std::bind(&abc::chirik, &aaa));
 
    topw.show();
    return app.exec();
}
На всякие вопросы типа "а если у меня 100500 параметров" - ответ один: rtfm доку по bind, она рулез.
1
3 / 3 / 0
Регистрация: 12.07.2022
Сообщений: 216
10.02.2025, 23:25  [ТС]
Цитата Сообщение от ablex Посмотреть сообщение
Добавлю пример, а то автор чтота не реагирует, хотя ответ мой видел (может не понял, хз)
Да я просто пробовал. Как попробовал, так и поставил плюсик Про bind знаю, но что её можно было так вызывать, с указателем на функцию-член, и передав адрес экземпляра как аргумент - вот это было как-то не очевидно, спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.02.2025, 23:25

Как послать сигнал (самодельный) методом emit из потока в другой поток?
#include &quot;mainwindow.h&quot; #include &quot;ui_mainwindow.h&quot; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new...

Qt5 новый метод соединения сигналов и слотов
Вот здесь в пункте &quot;new connection syntax&quot; написано что в 5-ой версии соединение сигналов и слотов изменено, но ещё написано что это новая...

Вызвать закрытый метод через объект
всем привет) Для приложения сделал отдельное окно &quot;Preferences&quot; на базе QDialog, в котором выставляются все опции. Оно является членом...

Подписать слот на сигнал от N объектов одного класса
Здравствуйте, есть N-количество объектов класса Circle в массиве field (MainWindow), у класса Circle есть сигнал click(int,int), как...

Qt соединить сигнал с сигналом одного и того же объекта
Добрые день! Подскажите можно ли соединить пары сигналов одного класса? Есть класс изменение полей которого вызывает различные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru