1

私はプログラミングの経験がありますが、まだ学習中です。次のように、QGraphicsRectItemを格納するQVector配列を作成することにしました。

QVector<QGraphicsRectItem> *FreeLayer1;

FreeLayer1 = new QVector<QGraphicsRectItem>;
FreeLayer1->resize(10);

エラーは次のとおりです。

c:\QtSDK\Desktop\Qt\4.8.1\msvc2010\include\QtCore/qvector.h(532) : error C2248: 'QGraphicsRectItem::QGraphicsRectItem' : cannot access private member declared in class 'QGraphicsRectItem'
c:\qtsdk\desktop\qt\4.8.1\msvc2010\include\qtgui\qgraphicsitem.h(728) : see declration of 'QGraphicsRectItem::QGraphicsRectItem'
c:\qtsdk\desktop\qt\4.8.1\msvc2010\include\qtgui\qgraphicsitem.h(683) : see declaration of 'QGraphicsRectItem'
c:\QtSDK\Desktop\Qt\4.8.1\msvc2010\include\QtCore/qvector.h(473) : while compiling class template member function 'void QVector<T>::realloc(int,int)'

これは本当にばかげているか、簡単に聞こえるかもしれませんが、私のようなエラーは見つかりませんでした。また、宣言の経験もあまりありません。私の質問は、変数FreeLayer1を使用するためにこのコードをどのように記述できるかということです。私はQVector<>の使用を主張していますが、それを宣言する方法がわかりません。

ご協力ありがとうございました!:)

4

1 に答える 1

2

宣言は問題ありません。問題は、QGraphicsRectItemのデフォルトコンストラクターがプライベートであるため、QVector::resizeのようなデフォルトコンストラクターを必要とするQVectorのメソッドを使用できないことです。QGraphicsRectItemのドキュメントを見ると、パブリックコピーコンストラクターまたはコピー代入演算子も存在しないようであるため、QGraphicsRectItemはQVectorの要素タイプとして適格ではありません。QGraphicsRectItemへのポインタを保存する必要があります。

QVector<QGraphicsRectItem*> FreeLayer1;
FreeLayers1.resize(10);
FreeLayers1[0] = new QGraphicsRectItem(/* ... */);
于 2012-09-18T01:34:30.843 に答える