Russian Qt Forum

Qt => Общие вопросы => Тема начата: ksk- от Апрель 07, 2015, 20:35



Название: Объявление слотов в Qt5
Отправлено: ksk- от Апрель 07, 2015, 20:35
Всем привет! Всем известно, что в Qt5 появилась возможность соединять с сигналами обычные методы. В таком случае, стоит ли вообще объявлять методы как слоты? Если да, то почему?


Название: Re: Объявление слотов в Qt5
Отправлено: PimenS от Апрель 07, 2015, 22:09
Привет! Я пока плохо разобрался в connect Qt5, но мне кажется, что слоты объявлять все равно придется.
Например QComboBox может отправить сигналы:

void   currentIndexChanged(int index)
void   currentIndexChanged(const QString & text)

а мне нужно принять только int. Нигде не увидел как передать значение в connect нового типа.


Название: Re: Объявление слотов в Qt5
Отправлено: alex312 от Апрель 08, 2015, 01:53
Код
C++ (Qt)
connect(ui->normalLevelVoltageSpin, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
           eltek_control_.data(), &EltekControl::setNomalLevelVoltage);
 


Название: Re: Объявление слотов в Qt5
Отправлено: Bepec от Апрель 08, 2015, 05:23
Стоит объявлять как слоты, хотя бы для прозрачности кода.


Название: Re: Объявление слотов в Qt5
Отправлено: carrygun от Апрель 08, 2015, 05:36
Если приложение использует скриптовый движок (QJSEngine), то слоты удобны. Не писать же у каждого метода Q_INVOKABLE.


Название: Re: Объявление слотов в Qt5
Отправлено: Пантер от Апрель 08, 2015, 08:25
ИМХО, слоты нужны только для вызова из Qml, в остальных случаях можно обойтись простыми методами.


Название: Re: Объявление слотов в Qt5
Отправлено: GreatSnake от Апрель 08, 2015, 11:00
ИМХО, слоты нужны только для вызова из Qml, в остальных случаях можно обойтись простыми методами.
Иногда бывает полезно вызвать слот через QMetaObject::invokeMethod().
Особенно метод гуёвого класса из другого треда.


Название: Re: Объявление слотов в Qt5
Отправлено: Пантер от Апрель 08, 2015, 11:06
ИМХО, слоты нужны только для вызова из Qml, в остальных случаях можно обойтись простыми методами.
Иногда бывает полезно вызвать слот через QMetaObject::invokeMethod().
Особенно метод гуёвого класса из другого треда.
Это тоже частный случай и можно воспользоваться Q_INVOKABLE.


Название: Re: Объявление слотов в Qt5
Отправлено: GreatSnake от Апрель 08, 2015, 11:17
Это тоже частный случай и можно воспользоваться Q_INVOKABLE.
Дык какая разница, что Q_SLOT, что Q_INVOKABLE?
Это всего лишь нотация moc-у.


Название: Re: Объявление слотов в Qt5
Отправлено: Пантер от Апрель 08, 2015, 11:20
Дык какая разница, что Q_SLOT, что Q_INVOKABLE?
Это всего лишь нотация moc-у.
Никакой, кроме того, что если у тебя 10 методов и один из них внезапно нужно сделать слотом, то проще Q_INVOKABLE прописать у него, чем выделять блок слота и переносить его туда.


Название: Re: Объявление слотов в Qt5
Отправлено: GreatSnake от Апрель 08, 2015, 11:22
Никакой, кроме того, что если у тебя 10 методов и один из них внезапно нужно сделать слотом, то проще Q_INVOKABLE прописать у него, чем выделять блок слота и переносить его туда.
На самом деле Qt-ишники для этих целей сначала придумали Q_SLOT  :)