2011-01-02 6 views
5

QGraphicsViewで使用しようとしているQLabelのサブクラスを作成しました。グラフィックス・ビューをクリックしてドラッグすることができる移動可能な「ポイント」として機能します。QLabelのピックスマップを設定しないのはなぜですか?

カスタムクラスを作成してグラフィックビューに表示させることは問題にはなりません。しかし、私が欲しいイメージで自分自身をペイントするカスタムQLabelを取得しようとしていることは起こっていません。私のカスタムQLabelクラスのコンストラクタはそうのようなものです:私はimagesディレクトリは、アプリケーションから実行された作業ディレクトリに存在することを確実にしました

TrackerPoint::TrackerPoint(QWidget *parent) : 
    QLabel(parent) 
{ 
    this->setFixedSize(40, 40); 
    QPixmap pixmap(":/images/target.png"); 
    this->setPixmap(pixmap); 
    this->setMask(pixmap.mask()); 
} 

。それがすべてで関連している場合は、私のQRCファイルはそうのようなものです:

<RCC> 
<qresource prefix="/images"> 
<file>images/target.png</file> 
</qresource> 
</RCC> 

私は日のために、この問題に対処しようとしてきた - 画像が表示されない理由についての任意のアイデアは素敵でしょう。

+0

'TrackerPoint :: paintEvent'で' QLabel'の 'paintEvent'をオーバーライドしたのでしょうか? – ismail

+0

ctorの使用は問題ありません。ほとんどの場合、サブクラス化は必要ではありません。あなたはgraphicssceneの外にラベルを作成しようとしましたか? QGraphicsPixmapItemを試しましたか? –

答えて

6

を(?それは私がQLabelのコンストラクタでピックスマップを設定していたという事実に関係していない)あなたが持っている:

<qresource prefix="/images"> 
<file>images/target.png</file> 
</qresource> 

は、私は、これは中に二重imagesにつながると思いますリソースパス(:/images/images/target.png)。これを修正するには、prefix="/images"を削除するか、fileタグにalias="target.png"と入力してください。

は、それが QPixmap::loadを使用するように、それはエラーをチェックすることができますので、あなたは、あなたのコードを書くことができ、エラーがある場合、それをより明確にするには:

QPixmap pixmap; 
if (!pixmap.load(":/images/target.png")) { 
    qWarning("Failed to load images/target.png"); 
} 
this->setPixmap(pixmap); 

それとも、さらに行くとQImageReaderを使用することができたことができます詳細なエラーメッセージを表示します。

+0

ありがとうございます!それが私の問題を解決しました。私がQLabelにPNG透明度を使用したいのであれば、接線的に何か特別なことはありますか? –

+0

いいえ、Qt PNGプラグイン以外の特別な操作は必要ありません。 –

関連する問題