0

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)));

そして、これはスロットの定義です:

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

しかし、何も起こらず、ラベルがクリアされ、画像が表示されません。私が間違っていることは何ですか?あなたの助けを待っています:(

4

1 に答える 1

0

ドキュメントから:

QImage で QPainter を使用すると、現在の GUI スレッドとは別のスレッドで描画を実行できます

したがって、あなたがしようとしていることはうまくいくはずです。スレッドを正しく設定しましたか? ui->label_2 の使用法は非常に疑わしいようです。スレッドに ui 要素がありますか、それともスレッドから GUI 要素にアクセスしますか? おそらく、あなたのコードをもっと見せてください。

于 2013-05-03T17:04:27.660 に答える