我想通过连接将在类函数中定义的成员parentWidget
发送到另一个类,因为我想将它添加到列表中。
不幸的是,我对此会员权限有误。
回复错误是:
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 :(得分:0)
QGraphicsWidget
继承QObject
,因此无法复制。 addToItemList
函数按值接收其参数,这会导致复制尝试。一种可能的解决方案是将函数的参数类型更改为QGraphicsWidget*
,并将对象创建为QGraphicsWidget *parentWidget = new QGraphicsWidget()
。这也可以消除代码中memmove
的非常奇怪和错误的使用。
答案 1 :(得分: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);
}