2016-06-29 9 views
0

クラス機能で定義されたメンバーparentWidgetを、別のクラスに接続で送信したいのですが、これはリストに追加したいからです。 Unfornately私はこのメンバーのアクセス権に誤りがあります。クラス間のQT許可メンバー

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

C2248: 'QGraphicsWidget :: QGraphicsWidgetは':クラスで宣言されたプライベートメンバにアクセスすることはできません 'QGraphicsWidget'

だからここに私の関数である

void DiagramScene::insertWidget(DiagramItem::DiagramType diagramtype) 
{ 
    QGraphicsWidget parentWidget; 

    //some code 

    connect(this,SIGNAL(sendToItemList(QGraphicsWidget)),diagramitem,SLOT(addToItemList(QGraphicsWidget))); 
    emit this->sendToItemList(parentWidget); 
} 

これは私のスロットです:

void DiagramItem::addToItemList(QGraphicsWidget widget) 
{ 
    QGraphicsWidget * newWidget; 
    memmove(newWidget,&widget,sizeof(QGraphicsWidget)); 
    items.append(newWidget); 
} 

答えて

0

QGraphicsWidgetQObjectを継承しているため、コピーできません。 addToItemList関数は引数を値で受け取り、コピーを試みます。考えられる解決策の1つは、関数の引数の型をQGraphicsWidget*に変更し、オブジェクトをQGraphicsWidget *parentWidget = new QGraphicsWidget()として作成することです。これにより、あなたのコードからmemmoveが非常に奇妙で間違って使用されることもなくなります。

+0

は、最初に私はポインタとしてQGraphicsWidget' '選びました。しかし、最後に削除したいのは、各関数呼び出し時にリスト内のすべてのウィジェットを追加するためです –

0

私は間違いかもしれませんが、QObjectから継承しているので、QGraphicsWidgetをコピーすることはできません。 (Can be read here)

私の提案は:

void DiagramScene::insertWidget(DiagramItem::DiagramType diagramtype) 
{ 
    QGraphicsWidget* parentWidget = new QGraphicsWidget(); 

    //some code 

    connect(this,SIGNAL(sendToItemList(QGraphicsWidget)),diagramitem,SLOT(addToItemList(QGraphicsWidget))); 
    emit this->sendToItemList(parentWidget); 
} 


void DiagramItem::addToItemList(QGraphicsWidget* widget) 
{ 
    items.append(widget); 
} 
関連する問題