通过另一个线程QImage到QPixmap

时间:2013-05-03 11:22:12

标签: multithreading qt drawing qimage

我将QImage发送到GUI线程时遇到了问题:

这是我在子线程中的代码:

QSize size = ui->label_2->size();
size=ui->label_2->size();
QImage pic(size.width(),size.height(),QImage::Format_ARGB32_Premultiplied);
pic.fill(Qt::transparent);
QPainter painter(&pic);
for (unsigned int i=0; i < wayVector.size(); i++){
    double *x = new double[wayVector[i].refs.size()];
    double *y = new double[wayVector[i].refs.size()];
    for (unsigned int j=0; j<wayVector[i].refs.size(); j++){
        x[j]=nodeHash[wayVector[i].refs[j]].lon;
        y[j]=nodeHash[wayVector[i].refs[j]].lat;
    }
    for (unsigned int j=0; j<wayVector[i].refs.size()-1;j++){
        painter.setPen(Qt::green);
        painter.drawLine(size.width()*x[j]/(maxlon-minlon),
                         size.height()*maxlat/(maxlat-minlat)-size.height()*y[j]/(maxlat-minlat),
                         size.width()*x[j+1]/(maxlon-minlon),
                         size.height()*maxlat/(maxlat-minlat)-size.height()*y[j+1]/(maxlat-minlat));
    }
}
emit sendPixmap(pic);

这是信号/插槽连接:

 connect(this,SIGNAL(sendPixmap(QImage)),this,SLOT(setImage(QImage)));

这是slot的定义:

void MainWindow::setImage(QImage img){
    ui->label_2->setPixmap(QPixmap::fromImage(img));
}

但没有任何事情发生,标签清除,没有图像出现。 我做错了什么?等待你的帮助:(

1 个答案:

答案 0 :(得分:0)

来自文档:

  

在QImage上使用QPainter时,绘画可以在当前GUI线程之外的另一个线程中执行

所以你打算做什么应该工作。 你确定你已经正确设置了你的线程吗?您对ui-> label_2的使用看起来非常可疑,您的线程中是否有ui元素,或者您是否从线程中访问GUI元素?也许您应该向我们展示更多代码。