在Qt中分配QGraphicsDropShadowEffect对象时,不会发生复制构造函数

问题描述

由于在QGraphicsDropShadowEffect中的某些QPushButton(s)添加了阴影效果,我声明了两个qt空指针:

QGraphicsDropShadowEffect *effectButton1;
QGraphicsDropShadowEffect *effectButton2;

然后,我将内存分配给effectButton1,并调用setXOffsetsetYOffsetsetBlurRadius方法来为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());