Russian Qt Forum
Ноябрь 23, 2024, 07:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] Вызов слота без сигнала  (Прочитано 6491 раз)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« : Октябрь 29, 2014, 11:44 »

Привет, друзья!
У меня имеется слот, который принимает double, далее он смотрит кто sender и в зависимости от полученных значений предпринимает действие.
Этот слот прикручен к QDoubleSpinbox'ам и при их изменении слот вызывается.
Как мне без изменения значения в QDoubleSpinbox вызвать слот и подставить sender?
« Последнее редактирование: Октябрь 29, 2014, 14:42 от __Heaven__ » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Октябрь 29, 2014, 11:46 »

Не работать через sender. Смеющийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Октябрь 29, 2014, 11:59 »

Через QMetaObject вызвать сигнал, но это, как понимаешь, хак и не красиво.

Код
C++ (Qt)
QMetaObject::invokeMethod(ui->doubleSpinBox, "valueChanged", Qt::AutoConnection, Q_ARG(double, ui->doubleSpinBox->value()));
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #3 : Октябрь 29, 2014, 12:02 »

Через QMetaObject вызвать сигнал, но это, как понимаешь, хак и не красиво.

Код
C++ (Qt)
QMetaObject::invokeMethod(ui->doubleSpinBox, "valueChanged", Qt::AutoConnection, Q_ARG(double, ui->doubleSpinBox->value()));

Ну да, наверное, жестковато... А если я вызываю из своего класса слот прямым вызовом, то сендер будет только он. Верно?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Октябрь 29, 2014, 12:05 »

Ну да, наверное, жестковато... А если я вызываю из своего класса слот прямым вызовом, то сендер будет только он. Верно?

Нет!

Цитировать
QObject * QObject::sender () const [protected]
Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; otherwise it returns 0
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Октябрь 29, 2014, 12:45 »

При прямом вызове слота можно явно указать сендера
Код
C++ (Qt)
Q_SLOT void setValue( double v, QObject* osender = 0 )
{
      QObject* so = sender() ? sender() : osender;
      ...
}
 
Записан

Qt 5.11/4.8.7 (X11/Win)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #6 : Октябрь 29, 2014, 14:42 »

Нет, все-таки пришел к выводу, что все это извращение и проще написать отдельную инициализирующую функцию.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.113 секунд. Запросов: 23.