Russian Qt Forum
Ноябрь 24, 2024, 00:03
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Можно ли "заморозить" слот/сигнал?
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Можно ли "заморозить" слот/сигнал? (Прочитано 18457 раз)
Fregloin
Супер
Offline
Сообщений: 1025
Можно ли "заморозить" слот/сигнал?
«
:
Сентябрь 18, 2012, 11:20 »
Можно ли заморозить определенный слот/сигнал у виджета?
Есть комбобокс. К сигналу currentIndexChanged(int index) привязан слот, который обновляет таблицу нужными элементами.
При заполнении комбобокса через addItem(), этот слот вызывается каждый раз при добавлении нового элемента, что вызывает излишние расходы на обновления таблицы.
setUpdatesEnabled ничего не дает. Сигналы/слоты связаны на этапе проектирования в дизайнере.
есть ли возможность как то заморозить сигнал на время, что бы он не испускался определенное время, например при заполении комбобокса? или только вручную connect/disconnect в нужные моменты?
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Можно ли "заморозить" слот/сигнал?
«
Ответ #1 :
Сентябрь 18, 2012, 11:27 »
Код
C++ (Qt)
bool
QObject
::
blockSignals
(
bool
block
)
Записан
Qt 5.11/4.8.7 (X11/Win)
Fregloin
Супер
Offline
Сообщений: 1025
Re: Можно ли "заморозить" слот/сигнал?
«
Ответ #2 :
Сентябрь 18, 2012, 14:57 »
спасибо
Записан
navrocky
Гипер активный житель
Offline
Сообщений: 817
Погроммист
Re: Можно ли "заморозить" слот/сигнал?
«
Ответ #3 :
Сентябрь 18, 2012, 18:04 »
blockSignals() заморозит все сигналы, поэтому с ним надо осторожно обращаться. Я обычно использую флажок вместо блокировки сигнала и в слоте проверяю этот флажок.
Записан
Гугль в помощь
Akon
Гость
Re: Можно ли "заморозить" слот/сигнал?
«
Ответ #4 :
Сентябрь 18, 2012, 22:22 »
я за connect/disconnect в нужные моменты
Записан
navrocky
Гипер активный житель
Offline
Сообщений: 817
Погроммист
Re: Можно ли "заморозить" слот/сигнал?
«
Ответ #5 :
Сентябрь 19, 2012, 10:45 »
connect/disconnect - это поиск строки (пока Qt5 не вышло), что есть не всегда оптимально.
Записан
Гугль в помощь
Akon
Гость
Re: Можно ли "заморозить" слот/сигнал?
«
Ответ #6 :
Сентябрь 19, 2012, 13:32 »
Да, но для гуя вся эта скорость неактуальна.
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Можно ли "заморозить" слот/сигнал?
«
Ответ #7 :
Сентябрь 19, 2012, 15:46 »
Цитата: Akon от Сентябрь 19, 2012, 13:32
Да, но для гуя вся эта скорость неактуальна.
Ню-ню.
Тролли тоже видимо так думали, когда связывали вью с моделью через сигналы.
В результате имеем тормоз при больших таблицах.
Записан
Qt 5.11/4.8.7 (X11/Win)
Akon
Гость
Re: Можно ли "заморозить" слот/сигнал?
«
Ответ #8 :
Сентябрь 19, 2012, 15:59 »
Вы серьезно полагаете, что это из-за сигналов и слотов?
Записан
Bepec
Гость
Re: Можно ли "заморозить" слот/сигнал?
«
Ответ #9 :
Сентябрь 19, 2012, 18:38 »
Да, именно из-за сигналов и слотов
Потому соответственно приходится сигналы сажать на цепь
Записан
navrocky
Гипер активный житель
Offline
Сообщений: 817
Погроммист
Re: Можно ли "заморозить" слот/сигнал?
«
Ответ #10 :
Сентябрь 20, 2012, 11:02 »
На исполнение сигналы, вроде бы, не сильно тормозят. Только коннект и дисконнект относительно медленный.
Хотя в случае топикстартера, конечно, этим временем можно пренебречь.
Вот еще есть такая штука, как альтернатива блокировки сигналов -
http://www.prog.org.ru/topic_15938_0.html
«
Последнее редактирование: Сентябрь 20, 2012, 11:05 от navrocky
»
Записан
Гугль в помощь
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Можно ли "заморозить" слот/сигнал?
«
Ответ #11 :
Сентябрь 21, 2012, 08:06 »
Bepec
Практика показала, что тормозят не сигнал\слоты, а перерассчеты во вьюхе, отрисовка, и, как это ни странно, реаллоки в списке с данными. Советую поглядеть в профилировщике. Ну и да, инсертить в модель чаще чем 25 раз в секунду не имеет смысла:) Группируйте обновления модели.
Записан
Bepec
Гость
Re: Можно ли "заморозить" слот/сигнал?
«
Ответ #12 :
Сентябрь 21, 2012, 09:12 »
Несогласен с вами
% на 70.
Конечно тормоза вытекают из обработок, которые вызываются из слотов, вызываемых сигналами
Но и сигналы тоже не быстры
PS про 25 секунд и сам дошёл давно уже
Это проходил каждый
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Можно ли "заморозить" слот/сигнал?
«
Ответ #13 :
Сентябрь 21, 2012, 12:07 »
Зря не согласны. У нас есть модель, в к-ой 2 миллиона строк (!) и постоянно добавляются новые строки. Еще раз - реаллок и/или меммув, вызванные инсертом/ремувом, занимает времени больше (во много раз), чем вызов слота, сконнекченного с сигналом. Особенно, если пользовать стандартные QList\QVector:) Проверено профайлером 20 раз.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Можно ли "заморозить" слот/сигнал?
«
Ответ #14 :
Сентябрь 21, 2012, 12:19 »
Цитата: Авварон от Сентябрь 21, 2012, 12:07
Еще раз - реаллок
Для не владеющих сленгом столичной молодежи - не могли бы Вы пояснить кто такой "реаллок"?
Цитата: Авварон от Сентябрь 21, 2012, 12:07
Особенно, если пользовать стандартные QList\QVector:)
Да, где-то с миллиона элементов сладкая жизнь с простыми контейнерами кончается (и это правильно
)
Записан
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...