|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.07.2017, 11:02 | #1 |
Пользователь
Регистрация: 25.03.2013
Сообщений: 36
|
Проблема в подгрузкой картинок в QT
Всем доброго времени суток!
Ситуация такая: у меня есть 4шт. QLabel, на которых я отображаю QPixmap, который получаю из QImage, который в свою очередь получает изображение из сырого буфера данных. Плюс ко всему этому поверх этих картинок иногда отображается меню, в котором подсвечивается текущий выбранный элемент (меню перебора). В моем главном GUI-классе Draw я сделал таймер с интервалом 10мс, в обработчике которого проверяю есть ли новые картинки для 4шт. QLabel и отображаю меню. Проблема в том, что меню ощутимо тормозит если выводить картинки на 4шт. QLabel. Если делаю на 1шт., то в принципе нормально. Я подозреваю, что задержка возникает при подгрузке QImage из буфера данных и потом преобразование QImage в QPixmap также занимает много ресурсов. Делаю я это так: Код:
|
25.07.2017, 15:00 | #2 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Убедитесь, что QPixmap создается в ГУИ потоке. Если его создавать в любом другом - будут чудные баги.
Вот пример кешера картинок https://github.com/alexzk1/astroed/tree/master/memimage Я его запускаю в потоке, он грузит файлы. А превью их по мере читает. Последний раз редактировалось alexzk; 25.07.2017 в 15:04. |
25.07.2017, 17:17 | #3 |
Пользователь
Регистрация: 25.03.2013
Сообщений: 36
|
У меня сейчас всё в одном потоке, включая и QPixmap. Я вот и хотел как раз разделить - обработку в отдельных потоках, а присваивать QPixmap на QLabel в основном GUI, но как это организовать пока не понимаю - в QT очень замудренные потоки, все запутанно...
|
26.07.2017, 12:33 | #4 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Да не нужны те потоки замудреные, вполне пойдет std::thread. У QThread есть дополнительный цикл обработки сообщений, но он нужен только, если вы собрались ПРИНИМАТЬ сигнал. Для emit signal (или вообще без них) сойдет стандартный.
|
27.07.2017, 10:09 | #5 |
Пользователь
Регистрация: 25.03.2013
Сообщений: 36
|
Я в свое время обнаружил, что QT не уживается с pthread, поэтому и стал смотреть в сторону родных QT-шных потоков. Вопрос как с std::thread - не будет ли каких-то конфликтов или подводных камней?
|
27.07.2017, 12:55 | #6 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Не замечал, кт 5.6 - 5.9, собираю линукс-мак.
...там другая засада будет, например, стек на линуксе у потока 8мб, а на маке 512кб. При сильной загрузке стека объектами - будут непонятный вылеты (в аллокаторах). Так что, мне вообще потом пришлось на буст перейти (в нем можно при создании размер стека задать, сохраняя std::thread стиль). ...а вот про винды ничего не знаю. Скорее всего, нужно собирать с помощью g++,а не визуалки, тогда там везде pthread. ....вообще, повспоминал, при написании многоплатформеного кода, там действительно нужно внимательно выставлять ключи компилятора, в частности - какие потоки линковать. Но, это не отменяет сути, С++ код остается все тем же - решает компилер/линкер. И вот там, главное не включить 2 вида потоков. Это касается и библиотек, например, либа может быть собрана без pthread,а программа "С" (причем, скажем, в обоих в коде std::thread) - вот вам и конфликт. Последний раз редактировалось alexzk; 27.07.2017 в 13:28. |
28.07.2017, 14:55 | #7 |
Пользователь
Регистрация: 25.03.2013
Сообщений: 36
|
|
28.07.2017, 20:51 | #8 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
std::thread не означает автоматически использование pthread, это уже будет решено на этапе компиляции. Так вот у виндовс есть 2 варианта - pthread и ее родное. Т.е. любая самостоятельно компилируемая программа или либа может использовать 1 из двух.
Далее вы писали - оно конфликтует, не знаю не видел, но привел вариант, как можно получить 2 разных варианта в 1 программе. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Delphi 7. как решить проблему с подгрузкой картинок | BOOGFud | Помощь студентам | 2 | 17.03.2012 00:45 |
Проблема с выводом картинок | pufystyj | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 1 | 29.07.2011 07:28 |
Проблема с увеличением картинок | Napste® | JavaScript, Ajax | 0 | 02.06.2010 18:53 |
Проблема с подгрузкой WinHTTP.dll | motorway | Microsoft Office Excel | 1 | 29.07.2009 00:30 |
Проблема с прогрузкой картинок. | Wuf | HTML и CSS | 7 | 04.12.2008 16:50 |