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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Объявление слотов в Qt5  (Прочитано 6263 раз)
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« : Апрель 07, 2015, 20:35 »

Всем привет! Всем известно, что в Qt5 появилась возможность соединять с сигналами обычные методы. В таком случае, стоит ли вообще объявлять методы как слоты? Если да, то почему?
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #1 : Апрель 07, 2015, 22:09 »

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

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

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

Сообщений: 606



Просмотр профиля
« Ответ #2 : Апрель 08, 2015, 01:53 »

Код
C++ (Qt)
connect(ui->normalLevelVoltageSpin, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
           eltek_control_.data(), &EltekControl::setNomalLevelVoltage);
 
Записан
Bepec
Гость
« Ответ #3 : Апрель 08, 2015, 05:23 »

Стоит объявлять как слоты, хотя бы для прозрачности кода.
Записан
carrygun
Гость
« Ответ #4 : Апрель 08, 2015, 05:36 »

Если приложение использует скриптовый движок (QJSEngine), то слоты удобны. Не писать же у каждого метода Q_INVOKABLE.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #5 : Апрель 08, 2015, 08:25 »

ИМХО, слоты нужны только для вызова из Qml, в остальных случаях можно обойтись простыми методами.
Записан

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

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Апрель 08, 2015, 11:00 »

ИМХО, слоты нужны только для вызова из Qml, в остальных случаях можно обойтись простыми методами.
Иногда бывает полезно вызвать слот через QMetaObject::invokeMethod().
Особенно метод гуёвого класса из другого треда.
Записан

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

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #7 : Апрель 08, 2015, 11:06 »

ИМХО, слоты нужны только для вызова из Qml, в остальных случаях можно обойтись простыми методами.
Иногда бывает полезно вызвать слот через QMetaObject::invokeMethod().
Особенно метод гуёвого класса из другого треда.
Это тоже частный случай и можно воспользоваться Q_INVOKABLE.
Записан

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

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Апрель 08, 2015, 11:17 »

Это тоже частный случай и можно воспользоваться Q_INVOKABLE.
Дык какая разница, что Q_SLOT, что Q_INVOKABLE?
Это всего лишь нотация moc-у.
Записан

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

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #9 : Апрель 08, 2015, 11:20 »

Дык какая разница, что Q_SLOT, что Q_INVOKABLE?
Это всего лишь нотация moc-у.
Никакой, кроме того, что если у тебя 10 методов и один из них внезапно нужно сделать слотом, то проще Q_INVOKABLE прописать у него, чем выделять блок слота и переносить его туда.
Записан

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

Сообщений: 2921



Просмотр профиля
« Ответ #10 : Апрель 08, 2015, 11:22 »

Никакой, кроме того, что если у тебя 10 методов и один из них внезапно нужно сделать слотом, то проще Q_INVOKABLE прописать у него, чем выделять блок слота и переносить его туда.
На самом деле Qt-ишники для этих целей сначала придумали Q_SLOT  Улыбающийся
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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