2016-06-29 28 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

QGraphicsWidget繼承QObject,所以它是不可複製的。 addToItemList函數通過值接收其參數,這導致了複製嘗試。一種可能的解決方案是將函數的參數類型更改爲QGraphicsWidget*並將該對象創建爲QGraphicsWidget *parentWidget = new QGraphicsWidget()。這也可以消除代碼中memmove的非常奇怪和不正確的使用。

+0

起初,我選用'QGraphicsWidget'爲指針。但我想在最後刪除它,因爲它會在每個函數調用中添加列表中的所有以前的小部件 –

0

我可能是錯的,但據我所知,您不能複製QGraphicsWidget,因爲它從QObject繼承。 (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); 
}