crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Прозрачность в потоке, Не хочет работать 4.7
cupersuper
  опции профиля:
сообщение 9.4.2015, 14:42
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 5.5.2011
Пользователь №: 2654

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте! Qt 4.7. Вне потока код работает нормально:

QImage IMG;
QPainter PAINTER;
QPen PEN;

IMG.load("img.jpg");
PAINTER.begin(&IMG);

PEN.setColor("#ff0000");
PAINTER.setOpacity(0.30);
PAINTER.setPen(PEN_T);
PAINTER.drawText( 20, 20, QString::fromLocal8Bit("Тест"));

Но когда помещаю в поток drawText крашит:
QObject::killTimers: timers cannot be stopped from another thread

Если убрать метод:
PAINTER.setOpacity(0.30);
Или передать в него 0 или 1, начинает работать.

Пробовал менять его на:
QColor clr = QColor("#ff0000");
PEN.setColor( QColor( clr.red(), clr.green(), clr.blue(), 254 ) );
Не помогает

Может кто знает какой-нибудь "костыль"?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
wiz29
  опции профиля:
сообщение 10.4.2015, 17:07
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Все работает

я заменил на такой код в потоковой функции
QImage IMG(QSize(300, 400), QImage::Format_ARGB32);
QPainter PAINTER;
QPen PEN;    
PAINTER.begin(&IMG);
PEN.setColor("#ff0000");
PAINTER.setPen(PEN);
PAINTER.setOpacity(0.30);
PAINTER.drawText( 20, 20, "Test");
IMG.save("done.jpg");


Какую версию Qt и ОС используете?

Я проверил на ОС Windows 7 и Qt 4.8.6 и Qt5.4.1

И на будущее, рекомендую сохранять файл в формате png, чтоб не было проблем связанных с потерей качества. Либо ставить для jpg параметр quality равным 100

Правда jpeg/jpg не сохраняют информацию для альфа-канала изображения.

//connect(MThread,SIGNAL(toInterfaseEND()),SLOT(fromMyThreadEND()));
connect(MThread,SIGNAL(toInterfaseEND()),SLOT(fromMyThreadEND()),
            Qt::QueuedConnection); //<- лучше делать так, когда сигнал генерируется в контексте другого потока.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 3:45