问题描述
由于在QGraphicsDropShadowEffect
中的某些QPushButton(s)
上添加了阴影效果,我声明了两个qt
空指针:
QGraphicsDropShadowEffect *effectButton1;
QGraphicsDropShadowEffect *effectButton2;
然后,我将内存分配给effectButton1
,并调用了setXOffset
,setYOffset
,setBlurRadius
方法来为effectButton1
对象设置阴影选项。
effectButton1 = new QGraphicsDropShadowEffect();
effectButton1->setXOffset(3);
effectButton1->setYOffset(3);
effectButton1->setBlurRadius(7);
现在,我想在使用effectButton1
运算符创建实例时将effectButton2
对象分配给new
。如您所知,在以下语句中,必须发生复制构造函数,并且我用setXOffset(3)
设置的值也必须设置为effectButton2
内存。但是两个对象的xOffset()
返回值是不同的(effectButton1
是 3 ,而effectButton2
是 8 ):>
effectButton2 = new QGraphicsDropShadowEffect(effectButton1);
QMessageBox::@R_303_4045@ion(this,"",QString("%1").arg(effectButton1->xOffset()));
QMessageBox::@R_303_4045@ion(this,QString("%1").arg(effectButton2->xOffset()));
我希望,当我调用effectButton1->setXOffset(3)
并将effectButton1
分配给effectButton2
时,将为XOffset
内存设置相同的effectButton2
值,因为复制构造函数必须发生)。
解决方法
考虑语句...
effectButton2 = new QGraphicsDropShadowEffect(effectButton1);
这将调用this constructor ...
QGraphicsDropShadowEffect(QObject *parent)
,以effectButton1
作为parent
参数。正如您似乎认为的那样,它没有调用复制构造函数。实际上,QGraphicsDropShadowEffect
没有复制构造函数,因为它是从QObject
继承的,不可复制。
如果要在effectButton1
中复制effectButton2
的状态,则需要手动复制适当的属性,例如...
effectButton2 = new QGraphicsDropShadowEffect;
effectButton2->setXOffset(effectButton1->xOffset());
等