Russian Qt Forum

Qt => Общие вопросы => Тема начата: __Heaven__ от Октябрь 29, 2014, 11:44



Название: [Решено] Вызов слота без сигнала
Отправлено: __Heaven__ от Октябрь 29, 2014, 11:44
Привет, друзья!
У меня имеется слот, который принимает double, далее он смотрит кто sender и в зависимости от полученных значений предпринимает действие.
Этот слот прикручен к QDoubleSpinbox'ам и при их изменении слот вызывается.
Как мне без изменения значения в QDoubleSpinbox вызвать слот и подставить sender?


Название: Re: Вызов слота без сигнала
Отправлено: Пантер от Октябрь 29, 2014, 11:46
Не работать через sender. ;D


Название: Re: Вызов слота без сигнала
Отправлено: Alex Custov от Октябрь 29, 2014, 11:59
Через QMetaObject вызвать сигнал, но это, как понимаешь, хак и не красиво.

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


Название: Re: Вызов слота без сигнала
Отправлено: __Heaven__ от Октябрь 29, 2014, 12:02
Через QMetaObject вызвать сигнал, но это, как понимаешь, хак и не красиво.

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

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


Название: Re: Вызов слота без сигнала
Отправлено: Alex Custov от Октябрь 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


Название: Re: Вызов слота без сигнала
Отправлено: GreatSnake от Октябрь 29, 2014, 12:45
При прямом вызове слота можно явно указать сендера
Код
C++ (Qt)
Q_SLOT void setValue( double v, QObject* osender = 0 )
{
      QObject* so = sender() ? sender() : osender;
      ...
}
 


Название: Re: Вызов слота без сигнала
Отправлено: __Heaven__ от Октябрь 29, 2014, 14:42
Нет, все-таки пришел к выводу, что все это извращение и проще написать отдельную инициализирующую функцию.