Russian Qt Forum

Qt => Общие вопросы => Тема начата: Gryz от Март 26, 2007, 19:01



Название: QFont в не GUI потоке. 4.2.2
Отправлено: Gryz от Март 26, 2007, 19:01
Никто не сталкивался с проблемой? Мне необходимо создавать экземпляры QFont в не GUI потоке.

Каждый раз при вызове конструктора QFont срёт в консоль.

Чем еще чревато использование QFont в не GUI?

Кроме конструктора я ничего не вызываю.


Название: Re: QFont в не GUI потоке. 4.2.2
Отправлено: QCasper от Март 26, 2007, 19:51
Цитата: "Gryz"
Никто не сталкивался с проблемой. Мне необходимо создавать экземпляры QFont в не GUI потоке.

Каждый раз при вызове конструктора QFont срёт в консоль.

Чем еще чревато использование QFont в не GUI?

Кроме конструктора я ничего не вызываю.


Я сталкивался, судя по всему никак на данном этапе развития Qt. Если только через мегаграбли. Я обошел проблему подготовокой картинки в главном потоке, а в отдельном потоке я уже вывожу ее. Но я не знаю какую задачу ты решаешь, и поэтому советовать особо чего-то не могу.


Название: Re: QFont в не GUI потоке. 4.2.2
Отправлено: Gryz от Март 27, 2007, 14:06
Цитата: "QCasper"

я не знаю какую задачу ты решаешь, и поэтому советовать особо чего-то не могу.


Просто создаю экземпляры QFont в не gui потоке в составе сложных объектов, потом передаю их gui.

Пока вижу единственное решение проблемы (т.е. как добиться отключения предупреждающих сообщений): создавать текстовое описание QFont в экземплярах QString, а потом уже в gui-потоке создавать по ним шрифты


Название: QFont в не GUI потоке. 4.2.2
Отправлено: chief от Август 08, 2007, 10:45
Столкнулся с похожей проблемой. нужно было склеить в QImage несколько слоёв один из которых слой с текстом. Удалось победить следующим образом
1. в потоке нужно создавать обьект QFont причём конструктор нужно использовать QFont ( const QString & family, int pointSize = -1, int weight = -1, bool italic = false ) - это связанно с тем что QFont использует механизм ImplicitSharing отсюда и падения на межпоточке ибо по дефолту вновь созданный QFont использует указатель на дефолтовый шрифт приложения.
2. нужно завернуть в мутексы всё обращение к шрифтам в потоках, что разумеется сводит на нет все вкусности многопоточности. это связано с использованием FreeType в Х11. как именно пока ниасилил. второе разумеется необходимо тока при работе под иксами.

эти мероприятия позволили сохранить идеологию системы но несколько поколебали суть разложения операций по потокам. так что если кто победил пункт 2 буду рад узнать как это сделать


Название: QFont в не GUI потоке. 4.2.2
Отправлено: Racheengel от Август 08, 2007, 14:03
странно, зачем понадобилось создавать гуишный фонт в негуишном потоке-то?