2011-01-18 7 views
1

見よコードと間違っているもの:この関数呼び出し

QImage *qi = new QImage(fullCharArray, imwidth, imheight, QImage::Format_Indexed8); 
ui->viewLabel->setPixmap(QPixmap::fromImage(qi,Qt::AutoColor)); 

なぜこれは私にエラーを与えるのでしょうか? fromImageへの呼び出しで、私が気の議論を変えるようにしようとしているのは何ですか?私はC++には比較的新しいので、これを正しく設定しているようです。私は行を変更すると動作します

QImage *qi = new QImage(fullCharArray, imwidth, imheight, QImage::Format_Indexed8); 
    ui->viewLabel->setPixmap(QPixmap::fromImage(qi[0],Qt::AutoColor)); 

しかし、これを行う正しい方法はありますか?

答えて

3

QPixmap::fromImageは、画像への参照であり、1つの画像へのポインタではないことを想定しているからです。

ただし、qi [0]を* qiに変更すると、意図が掃除されます。 (または単にポインタを使わずにQImage qi(fullCharArray ...で始まる)。

0

QPixmap::fromImageQImageを最初の引数として受け取り、pointer to a QImageではないようです。

0

qiはポインタで、setPixmapはオブジェクトを待っているように見えるので、最初のバージョンでは失敗します。あなたがあなたの質問にエラーメッセージを与える場合

正しい方法は、一般的に

QImage *qi = new QImage(fullCharArray, imwidth, imheight, QImage::Format_Indexed8); 
ui->viewLabel->setPixmap(QPixmap::fromImage(*qi,Qt::AutoColor)); 
2

それが役立つかもしれないです。あなたはconst QImage& exepects QPixMap::fromImageにタイプQImage*である気に合格しようとしている

、QImageのにとても参照:今すぐQTSでオンラインドキュメントを見てから、私はあなたの問題は次のようだと思います。したがって、あなたは何をすべきかqi逆参照されます。ptr[i]*(ptr+i)として定義されているので、これは、基本的には2番目のバージョンui->viewLabel->setPixmap(QPixmap::fromImage(qi[0],Qt::AutoColor));と同じなので、ptr[0]*ptrである基本的に*(ptr+0)を意味

ui->viewLabel->setPixmap(QPixmap::fromImage(*qi,Qt::AutoColor)); 

。しかしここで逆参照に*を使用すると、配列ではなく単一のオブジェクトへの参照を間接参照することが明確になります。