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 ) );
Не помогает

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


Студент
*

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

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




Репутация:   0  


mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    MThread = new MyThread();
    MThread->start();
}
mythread.cpp
MyThread::MyThread(QObject *parent) :
    QThread(parent)
{
}

void MyThread::run()
{
    QImage IMG;
    QPainter PAINTER;
    QPen PEN;
    IMG.load("img.jpg");
    PAINTER.begin(&IMG);


    PEN.setColor("#ff0000");
    PAINTER.setOpacity(0.30); //Эта строчка
    PAINTER.setPen(PEN);
    PAINTER.drawText( 20, 20, "Test"); //крашит этот метод
    IMG.save("done.jpg");
}
Не работает

mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    
    QImage IMG;
    QPainter PAINTER;
    QPen PEN;
    IMG.load("img.jpg");
    PAINTER.begin(&IMG);


    PEN.setColor("#ff0000");
    PAINTER.setOpacity(0.30);
    PAINTER.setPen(PEN);
    PAINTER.drawText( 20, 20, "Test");
    IMG.save("done.jpg");
}
Работает
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




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