Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
Написал класс фильтра событий. Одна загвоздка: метод перехвата в фильтре событий требует, чтобы тип второго параметра был QEvent, иначе он просто не перехватывает событие. А в типе QEvent нет возможности передать сопроводительную информацию. Я попробовал создать производный класс, наследника от QEvent, (с дополнительными членами) и передавать объекты этого класса. но тогда в обработчике фильтра события нет возможности обратиться к нужным членам (иначе ругается компилятор). Как выкрутиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2017, 12:22 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLКак выкрутиться?dynamic_cast спасёт ОРД =)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2017, 12:28 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
egorychdynamic_cast спасёт ОРД =)) Можно чуть- чуть подробнее? Что вы имеете в виду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2017, 12:54 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
egorychdynamic_cast спасёт ОРД =)) Спасибо, динамическое приведение типов помогло! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2017, 13:22 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLegorychdynamic_cast спасёт ОРД =)) Спасибо, динамическое приведение типов помогло!Убери немедленно! Если ты работаешь с Qt, то надо использовать qobject_cast. Оно "роднее", не требует RTTI, переносимее, и как ни странно - быстрее чем dynamic_cast. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2017, 06:25 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
[quot White Owl]AlekseySQLпропущено...Если ты работаешь с Qt, то надо использовать qobject_cast.есть только одна проблема, QEvent - не наследник от QObject :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2017, 12:59 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
egorych, сорри, накосячил с квотированием ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2017, 13:00 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
egorychegorych, сорри, накосячил с квотированием Пардон, а можно узнать что такое квотирование и как вы с ним накосячили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2017, 13:12 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
White OwlУбери немедленно! Если ты работаешь с Qt, то надо использовать qobject_cast. Оно "роднее", не требует RTTI, переносимее, и как ни странно - быстрее чем dynamic_cast. Спасибо, изучу вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2017, 13:13 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLПардон, а можно узнать что такое квотирование и как вы с ним накосячили?цитаты нарезал криво из сообщения White Owl 20333260 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2017, 13:37 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
dynamic_cast - вроде-как ключевое слово языка. Должно быть предпочтительнее in general. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2017, 17:19 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
egorychесть только одна проблема, QEvent - не наследник от QObject :)Упс... Действительно. Впрочем, никто не мешает сделать собственное событие унаследованным от QEvent и QObject одновременно. Код: plaintext 1. 2. 3. 4. 5. И получишь всю мощь Кьют-стайл РТТИ :) Хотя, я вообще сомневаюсь что исходную задачу надо решать. Как-то не могу придумать зачем в фильтре делать собственный класс событий. AlekseySQL, тебе мало QEvent::type = QEvent::UserType+X ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2017, 18:37 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
maytondynamic_cast - вроде-как ключевое слово языка. Должно быть предпочтительнее in general.Дело то в том, что С++ изначально не имеет RTTI, поэтому при реализации приходится извращаться. Как запихнуть в класс информацию о типе если класс это изначально структура без информации о типе? Поэтому для стандартного dynamic_cast, компилятору с линкером приходится городить большой и страшный .... даже не знаю как это цензурно назвать... Оно работает, но... А объектные фреймворки (типа Qt, GTK+, etc) поступают просто, они сразу заявляют: "У нашего языка нету RTTI, поэтому если хотите чтобы ваш класс все-же имел информацию о себе в рантайме - добавьте в свой класс наш макрос." И все собственные RTTI функции фреймворка читают именно информацию сохраненную в кучке полей добавленных макросом. И не требуют извращений от линкера как в случае с dynamic_cast. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2017, 18:48 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
White OwlА объектные фреймворки (типа Qt, GTK+, etc) поступают просто, они сразу заявляют: "У нашего языка нету RTTI, поэтому если хотите чтобы ваш класс все-же имел информацию о себе в рантайме - добавьте в свой класс наш макрос." И все собственные RTTI функции фреймворка читают именно информацию сохраненную в кучке полей добавленных макросом. И не требуют извращений от линкера как в случае с dynamic_cast. Можно ссылку где это поподробнее расписано? Не имел дел с объектными фреймворками. Как раз изобретаю свой подобный велосипед. Не помешает познакомиться с реальными решениями. Как тип задать макросом вообще ничего не придумывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2017, 19:15 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
Dima TWhite OwlА объектные фреймворки (типа Qt, GTK+, etc) поступают просто, они сразу заявляют: "У нашего языка нету RTTI, поэтому если хотите чтобы ваш класс все-же имел информацию о себе в рантайме - добавьте в свой класс наш макрос." И все собственные RTTI функции фреймворка читают именно информацию сохраненную в кучке полей добавленных макросом. И не требуют извращений от линкера как в случае с dynamic_cast. Можно ссылку где это поподробнее расписано? Не имел дел с объектными фреймворками. Как раз изобретаю свой подобный велосипед. Не помешает познакомиться с реальными решениями. Как тип задать макросом вообще ничего не придумывается.Ну пожалуй проще всего будет начать с GTK+, там это все очень даже наглядно происходит когда делаешь свой виджет. https://www.gtk.org/tutorial1.2/gtk_tut-22.html И обрати внимание на _get_type() главу. В Qt реализация для прикладника выглядит намного проще (просто добавь Q_OBJECT), но по сути, там происходит все тоже-самое, хоть и намного более многословно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2017, 19:51 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
White OwlВпрочем, никто не мешает сделать собственное событие унаследованным от QEvent и QObject одновременно. Код: plaintext 1. 2. 3. 4. 5. И получишь всю мощь Кьют-стайл РТТИ :)красиво :) жаль, что топикстартеру это не поможет ))) у него QEvent *, он не залезет в qobject_cast, что с наследниками не делай White OwlХотя, я вообще сомневаюсь что исходную задачу надо решать. Как-то не могу придумать зачем в фильтре делать собственный класс событий. AlekseySQL, тебе мало QEvent::type = QEvent::UserType+X ?вот с этим я согласен. Предполагаю даже, что и события ему не нужны, сигналов со слотами, вероятно, будет достаточно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2017, 00:28 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
egorychWhite OwlХотя, я вообще сомневаюсь что исходную задачу надо решать. Как-то не могу придумать зачем в фильтре делать собственный класс событий. AlekseySQL, тебе мало QEvent::type = QEvent::UserType+X ?вот с этим я согласен. Предполагаю даже, что и события ему не нужны, сигналов со слотами, вероятно, будет достаточно Мне не хватит стандартного QEvent с пользовательскими типами, потому что я передаю информацию из дочерних потоков основному (чтобы юзер радовался тому, как работает обработка). Насколько я понял стандартные события только сообщают, что они произошли: нажата такая-то кнопка, произошел таймаут... Поэтому для наличия дополнительных членов я создал наследника QEvent. Сигналы и слоты при межпоточном взаимодействии транслируются в события (с созданием лишних объектов через new/delete, что при многопоточной работе очень плохо). Поэтому мое решение более масштабируемо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2017, 01:05 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLСигналы и слоты при межпоточном взаимодействии транслируются в событияоткуда дровишки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2017, 01:37 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
Про повышение масштабируемости я конечно загнул. Все- таки изменение масштабируемости подразумевает качественные изменения, а в моем случае изменения всего навсего количественные. К тому же не факт, что при трансформации сигнала в событие будет использовано два и более объекта. egorychоткуда дровишки? Шлее М. "Qt 5.3. Профессиональное программирование на C++", примечание на стр 546. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2017, 08:19 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLПро повышение масштабируемости я конечно загнул. Все- таки изменение масштабируемости подразумевает качественные изменения, а в моем случае изменения всего навсего количественные. К тому же не факт, что при трансформации сигнала в событие будет использовано два и более объекта.просто ты вместо стандартного для фреймворка механизма изобрёл свой велосипед. Такой же, но с квадратными колёсами ))) AlekseySQLШлее М. "Qt 5.3. Профессиональное программирование на C++", примечание на стр 546.понято, спасибо) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2017, 12:38 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLМне не хватит стандартного QEvent с пользовательскими типами, потому что я передаю информацию из дочерних потоков основному (чтобы юзер радовался тому, как работает обработка).И почему вдруг стандартного QEvent не хватает? Что именно ты передаешь в ГУИ-поток? Процент выполнения задачи дочерним? Или текст что мол дочерний находится на таком-то этапе? Или что-то более сложное? Первые две задачи решаются элементарно: дочерний поток кидает главному событие которое имеет смысл: "у меня есть обновление". Главный читает shared переменную принадлежащую этой дочке и показывает значение этой переменной юзеру. Все. AlekseySQLСигналы и слоты при межпоточном взаимодействии транслируются в события (с созданием лишних объектов через new/delete, что при многопоточной работе очень плохо). Поэтому мое решение более масштабируемо.А сколько у тебя этих событий происходит? В секунду? В минуту? Ты уверен что то, что ты отмел как "очень плохо", на самом деле является всего-лишь "не абсолютно идеально"? Не забывай что человек не в состоянии прочитать текст появляющийся на экране на миллисекунду. На практике, даже прогресс-бар надо обновлять не чаще чем три раза в секунду, а тексты желательно не чаще чем раз в две-три секунды. Иначе ты просто зря потратишь ресурсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2017, 17:21 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
White OwlИ почему вдруг стандартного QEvent не хватает? Что именно ты передаешь в ГУИ-поток? Процент выполнения задачи дочерним? Или текст что мол дочерний находится на таком-то этапе? Или что-то более сложное? Первые две задачи решаются элементарно: дочерний поток кидает главному событие которое имеет смысл: "у меня есть обновление". Главный читает shared переменную принадлежащую этой дочке и показывает значение этой переменной юзеру. Все. Дочерних потоков много, поэтому при вашей реализации необходимо создать различные события для каждого потока (нужен какой-то менеджер QEvent ID). Также необходим потокобезопасный вектор с данными QString, в котором будет храниться информация из дочерних потоков. Не проще ли все трудности многопоточности переложить на потокобезопасный postEvent() от ребят из Qt? В этом случае параллельно посылаемые события уже будут выстроены последовательно в основном потоке, останется их только обрабатывать. [quot White OwlА сколько у тебя этих событий происходит? В секунду? В минуту? Ты уверен что то, что ты отмел как "очень плохо", на самом деле является всего-лишь "не абсолютно идеально"? Не забывай что человек не в состоянии прочитать текст появляющийся на экране на миллисекунду. На практике, даже прогресс-бар надо обновлять не чаще чем три раза в секунду, а тексты желательно не чаще чем раз в две-три секунды. Иначе ты просто зря потратишь ресурсы.[/quot] Согласен, код интерактивного взаимодействия с пользователем оптимизировать не нужно. Передача информации юзеру тоже работа с пользователем. А сигналами/слотами можно передать дополнительную информацию? Что-то я такого не встречал (хотя и глубоко этот вопрос не изучал). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2017, 18:31 |
|
||
|
Как в фильтр событий передать свой тип события?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLА сигналами/слотами можно передать дополнительную информацию? Что-то я такого не встречал (хотя и глубоко этот вопрос не изучал).конечно, ведь слот - это просто функция, в неё можно передавать всё, что тебе угодно )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2017, 13:13 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39428331&tid=2018226]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
169ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 286ms |
| total: | 547ms |

| 0 / 0 |
