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

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

09.02.2025, 00:12. Показов 5431. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru