2

重複の可能性:
タイプが不完全になる原因は何ですか?(QGraphicsItem:ソースまたはターゲットのタイプが不完全です)

私はこの質問から始めました:不完全なタイプにつながるものは何ですか?(QGraphicsItem:ソースまたはターゲットのタイプが不完全です)

そこに述べられているように、私は次のエラーを受け取りました(部分的に私自身の翻訳):

C664:パラメータ1を「Qt ::CursorShape」から「constQCursor&」に変換できません。ソースまたはターゲットのタイプが不完全です。

アイテムが不完全である可能性がある理由を理解しようとしている間、私はそれを最小限のテストケースに分解しましたが、それでもエラーが表示されます。奇妙なことは:それ絶対に最小限です...

ヘッダ:

#include <QGraphicsPixmapItem>

class PhotoItem : public QGraphicsPixmapItem
{
public:
    PhotoItem();
    void someMethod();

protected:
};

実装:

#include "photoitem.h"

PhotoItem::PhotoItem() : QGraphicsPixmapItem()
{
    QPixmap pxm(80, 80);
    pxm.fill(Qt::cyan);
    setPixmap( pxm );
}

void PhotoItem::someMethod()
{
    setCursor(Qt::OpenHandCursor);
}

コンパイルされず、上記のようなエラーが発生します。ただし、mainメソッドにカーソルを設定するとitem->setCursor(Qt::OpenHandCursor);問題なく動作します。エラーは他のQGraphicsItems全体で持続しているようです(少なくともQGraphicsRectItemをテストしました)。

私は完全に混乱していて、次に何をチェックすべきか本当にわかりません。上記のコードは他のマシン/セットアップで機能しますか?より多くの情報を得るために他に何をテストできますか?

ありがとう、ルイーズ

4

2 に答える 2

5

cppに、次の行を含めます。

#include <QCursor>

問題は、前方宣言を使用しているクラスがQCursorを宣言していることです(前方宣言を行います。つまり、「前方宣言」と言うのは正しいですか?)。Qt::OpenHandCursorはこのタイプですが、コンパイラはクラスQCursorがどこで定義されているかを認識していません。cppに定義が作成されたファイルを含めると、うまくいきます。

これがメイン関数で機能する理由は、おそらく、<QtGui>知らないうちに、、またはQCursorを含む他のヘッダーが含まれているためです。

于 2012-04-12T11:04:35.047 に答える
0

QGraphicsItems :: setCursorは、タイプQCursorのオブジェクトへの参照を想定していますが、列挙型要素であるQt :: OpenHandCursor、つまり特定のQCursorインスタンスを構築するために使用できる定数を渡そうとします。

私が想定し

setCursor(QCursor(Qt::OpenHandCursor));

あなたが望むことをします。

あなたが働いていると言ったあなたの「アイテム」がどのように宣言されているかを知ることは興味深いでしょう。

于 2012-04-12T11:30:28.997 に答える