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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Наследование сигналов  (Прочитано 9555 раз)
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« : Февраль 17, 2017, 11:42 »

Здравствуйте
Можете подсказать, при наследовании классов наследуются ли сигналы? Если наследуются, то можно ли сделать так, чтобы сигнал не наследовался (что-то типа protected члена)? Если можно, то как? Просто поместить в protected?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #1 : Февраль 17, 2017, 11:56 »

Сигналы наследуются. Нет смысла в protected сигналах.
Записан

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

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Февраль 17, 2017, 11:58 »

А зачем вообще использовать protected для сигналов?
Записан

YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #3 : Февраль 17, 2017, 12:10 »

Я хочу, чтобы в наследуемом классе не было сигнала базового класса. Можно так сделать?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #4 : Февраль 17, 2017, 12:11 »

На солько я знаю, нет. Да и зачем???
Записан

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

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Февраль 17, 2017, 12:17 »

А зачем вообще использовать protected для сигналов?
До Qt5 только такие и были.
Записан

Qt 5.11/4.8.7 (X11/Win)
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #6 : Февраль 17, 2017, 12:27 »

Спасибо.
У меня получается, что из предка с помощью сигнала надо вызывать функцию наследника
У меня как раз QT4
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #7 : Февраль 17, 2017, 12:31 »

Эм. А зачем вызывать сигналом, а не просто вызовом метода или тем же invokeMethod?
Записан

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

Сообщений: 858



Просмотр профиля
« Ответ #8 : Февраль 17, 2017, 12:38 »

Я хочу, чтобы в наследуемом классе не было сигнала базового класса. Можно так сделать?

Лучше напишите, что в конечном итоге хотите получить. И чем наследование сигналов мешает.
Записан

Пока сам не сделаешь...
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #9 : Февраль 17, 2017, 13:04 »

Я хочу, чтобы в наследуемом классе не было сигнала базового класса. Можно так сделать?

Можно, например, так

Код:
class BlaBla
{
    Q_OBJECT

#define temp_signals signals
#undef signals
#define signals private

signals:
    void myPrivateSignal();

#undef signals
#define signals temp_signals

}

Можно поискать в недрах Qt, там довольно часто используются приватные сигналы. Но это недокументированные возможности.

Только в Qt вся инкапсуляция нарушена напрочь, любой сигнал можно дернуть через invokeMethod.
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #10 : Февраль 17, 2017, 13:19 »

Вот так сами Qt шники делают

Код:
Q_SIGNALS:
#if !defined(Q_MOC_RUN) && !defined(qdoc)
    private: // can only be emitted by ...
#endif
  void somePrivateSignal();
Записан
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #11 : Февраль 17, 2017, 13:28 »

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

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #12 : Февраль 17, 2017, 13:33 »

Для этого не сигналы нужны, а виртуальные слоты.
Записан

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

Сообщений: 174


Просмотр профиля
« Ответ #13 : Февраль 17, 2017, 14:53 »

Я имел в виду в какое-то конкретно наследуемое.
Это фактически другой вопрос, на который я бы хотел получить ответ.

Есть окно(предок), в него приходят данные. В зависимости от того, какие данные, надо часть этих данных передать какому-то конкретному окну.
Тк я не знаю сколько окон (это количество определяет пользователь в процессе работы программы), то и не знаю сколько сигналов прописывать в классе.
Например, в предок пришла цифра 1 - значит окно номер 1 должно вывести 1, пришла 2 - окно номер 2 должно вывести 2 и тд
С помощью чего это реализовать?
Можно посылать один сигнал на все окна и окна будут сами понимать им пришло сообщение или нет. Т.е. если пришла цифра 2 в окно номер 1, то окно проверив 1 поймет, что сообщение пришло не ему
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #14 : Февраль 17, 2017, 15:17 »

Можно всем посылать. Можно заюзать паттерн Наблюдатель.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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