Russian Qt Forum
Март 28, 2024, 20:09
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Наследование сигналов
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Наследование сигналов (Прочитано 8579 раз)
YvenTitan
Самовар
Offline
Сообщений: 174
Наследование сигналов
«
:
Февраль 17, 2017, 11:42 »
Здравствуйте
Можете подсказать, при наследовании классов наследуются ли сигналы? Если наследуются, то можно ли сделать так, чтобы сигнал не наследовался (что-то типа protected члена)? Если можно, то как? Просто поместить в protected?
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Наследование сигналов
«
Ответ #1 :
Февраль 17, 2017, 11:56 »
Сигналы наследуются. Нет смысла в protected сигналах.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
gil9red
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1805
Re: Наследование сигналов
«
Ответ #2 :
Февраль 17, 2017, 11:58 »
А зачем вообще использовать protected для сигналов?
Записан
https://github.com/gil9red
https://ru.stackoverflow.com/users/201445/gil9red
YvenTitan
Самовар
Offline
Сообщений: 174
Re: Наследование сигналов
«
Ответ #3 :
Февраль 17, 2017, 12:10 »
Я хочу, чтобы в наследуемом классе не было сигнала базового класса. Можно так сделать?
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Наследование сигналов
«
Ответ #4 :
Февраль 17, 2017, 12:11 »
На солько я знаю, нет. Да и зачем???
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Наследование сигналов
«
Ответ #5 :
Февраль 17, 2017, 12:17 »
Цитата: gil9red от Февраль 17, 2017, 11:58
А зачем вообще использовать protected для сигналов?
До Qt5 только такие и были.
Записан
Qt 5.11/4.8.7 (X11/Win)
YvenTitan
Самовар
Offline
Сообщений: 174
Re: Наследование сигналов
«
Ответ #6 :
Февраль 17, 2017, 12:27 »
Спасибо.
У меня получается, что из предка с помощью сигнала надо вызывать функцию наследника
У меня как раз QT4
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Наследование сигналов
«
Ответ #7 :
Февраль 17, 2017, 12:31 »
Эм. А зачем вызывать сигналом, а не просто вызовом метода или тем же invokeMethod?
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ViTech
Гипер активный житель
Offline
Сообщений: 858
Re: Наследование сигналов
«
Ответ #8 :
Февраль 17, 2017, 12:38 »
Цитата: YvenTitan от Февраль 17, 2017, 12:10
Я хочу, чтобы в наследуемом классе не было сигнала базового класса. Можно так сделать?
Лучше напишите, что в конечном итоге хотите получить. И чем наследование сигналов мешает.
Записан
Пока сам не сделаешь...
ssoft
Программист
Offline
Сообщений: 574
Re: Наследование сигналов
«
Ответ #9 :
Февраль 17, 2017, 13:04 »
Цитата: YvenTitan от Февраль 17, 2017, 12:10
Я хочу, чтобы в наследуемом классе не было сигнала базового класса. Можно так сделать?
Можно, например, так
Код:
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
Сообщений: 574
Re: Наследование сигналов
«
Ответ #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
Сообщений: 174
Re: Наследование сигналов
«
Ответ #11 :
Февраль 17, 2017, 13:28 »
Еще раз спасибо)
Вообще есть окно; от этого окна наследуется несколько окон, сколько именно неизвестно. Надо из первого окна посылать сигналы в наследуемые.
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Наследование сигналов
«
Ответ #12 :
Февраль 17, 2017, 13:33 »
Для этого не сигналы нужны, а виртуальные слоты.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
YvenTitan
Самовар
Offline
Сообщений: 174
Re: Наследование сигналов
«
Ответ #13 :
Февраль 17, 2017, 14:53 »
Я имел в виду в какое-то конкретно наследуемое.
Это фактически другой вопрос, на который я бы хотел получить ответ.
Есть окно(предок), в него приходят данные. В зависимости от того, какие данные, надо часть этих данных передать какому-то конкретному окну.
Тк я не знаю сколько окон (это количество определяет пользователь в процессе работы программы), то и не знаю сколько сигналов прописывать в классе.
Например, в предок пришла цифра 1 - значит окно номер 1 должно вывести 1, пришла 2 - окно номер 2 должно вывести 2 и тд
С помощью чего это реализовать?
Можно посылать один сигнал на все окна и окна будут сами понимать им пришло сообщение или нет. Т.е. если пришла цифра 2 в окно номер 1, то окно проверив 1 поймет, что сообщение пришло не ему
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Наследование сигналов
«
Ответ #14 :
Февраль 17, 2017, 15:17 »
Можно всем посылать. Можно заюзать паттерн Наблюдатель.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...