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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Можно ли "заморозить" слот/сигнал?  (Прочитано 18436 раз)
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« : Сентябрь 18, 2012, 11:20 »

Можно ли заморозить определенный слот/сигнал у виджета?
Есть комбобокс. К сигналу currentIndexChanged(int index) привязан слот, который обновляет таблицу нужными элементами.
При заполнении  комбобокса через addItem(), этот слот вызывается каждый раз при добавлении нового элемента, что вызывает излишние расходы на обновления таблицы.
setUpdatesEnabled ничего не дает. Сигналы/слоты связаны на этапе проектирования в дизайнере.
есть ли возможность как то заморозить сигнал на время, что бы он не испускался определенное время, например при заполении комбобокса? или только вручную connect/disconnect  в нужные моменты?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Сентябрь 18, 2012, 11:27 »

Код
C++ (Qt)
bool QObject::blockSignals ( bool block )
Записан

Qt 5.11/4.8.7 (X11/Win)
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #2 : Сентябрь 18, 2012, 14:57 »

спасибо
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #3 : Сентябрь 18, 2012, 18:04 »

blockSignals() заморозит все сигналы, поэтому с ним надо осторожно обращаться. Я обычно использую флажок вместо блокировки сигнала и в слоте проверяю этот флажок.
Записан

Гугль в помощь
Akon
Гость
« Ответ #4 : Сентябрь 18, 2012, 22:22 »

я за connect/disconnect  в нужные моменты
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #5 : Сентябрь 19, 2012, 10:45 »

connect/disconnect - это поиск строки (пока Qt5 не вышло), что есть не всегда оптимально.
Записан

Гугль в помощь
Akon
Гость
« Ответ #6 : Сентябрь 19, 2012, 13:32 »

Да, но для гуя вся эта скорость неактуальна.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Сентябрь 19, 2012, 15:46 »

Да, но для гуя вся эта скорость неактуальна.
Ню-ню.
Тролли тоже видимо так думали, когда связывали вью с моделью через сигналы.
В результате имеем тормоз при больших таблицах.
Записан

Qt 5.11/4.8.7 (X11/Win)
Akon
Гость
« Ответ #8 : Сентябрь 19, 2012, 15:59 »

Вы серьезно полагаете, что это из-за сигналов и слотов?
Записан
Bepec
Гость
« Ответ #9 : Сентябрь 19, 2012, 18:38 »

Да, именно из-за сигналов и слотов Улыбающийся

Потому соответственно приходится сигналы сажать на цепь Улыбающийся
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #10 : Сентябрь 20, 2012, 11:02 »

На исполнение сигналы, вроде бы, не сильно тормозят. Только коннект и дисконнект относительно медленный.

Хотя в случае топикстартера, конечно, этим временем можно пренебречь.

Вот еще есть такая штука, как альтернатива блокировки сигналов -
http://www.prog.org.ru/topic_15938_0.html
« Последнее редактирование: Сентябрь 20, 2012, 11:05 от navrocky » Записан

Гугль в помощь
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #11 : Сентябрь 21, 2012, 08:06 »

Bepec
Практика показала, что тормозят не сигнал\слоты, а перерассчеты во вьюхе, отрисовка, и, как это ни странно, реаллоки в списке с данными. Советую поглядеть в профилировщике. Ну и да, инсертить в модель чаще чем 25 раз в секунду не имеет смысла:) Группируйте обновления модели.
Записан
Bepec
Гость
« Ответ #12 : Сентябрь 21, 2012, 09:12 »

Несогласен с вами Улыбающийся % на 70.

Конечно тормоза вытекают из обработок, которые вызываются из слотов, вызываемых сигналами Улыбающийся Но и сигналы тоже не быстры Улыбающийся

PS про 25 секунд и сам дошёл давно уже Улыбающийся Это проходил каждый Веселый
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #13 : Сентябрь 21, 2012, 12:07 »

Зря не согласны. У нас есть модель, в к-ой 2 миллиона строк (!) и постоянно добавляются новые строки. Еще раз - реаллок и/или меммув, вызванные инсертом/ремувом, занимает времени больше (во много раз), чем вызов слота, сконнекченного с сигналом. Особенно, если пользовать стандартные QList\QVector:) Проверено профайлером 20 раз.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Сентябрь 21, 2012, 12:19 »

Еще раз - реаллок
Для не владеющих сленгом столичной молодежи - не могли бы Вы пояснить кто такой "реаллок"?

Особенно, если пользовать стандартные QList\QVector:)
Да, где-то с миллиона элементов сладкая жизнь с простыми контейнерами кончается (и это правильно Улыбающийся)
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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