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

Copy constructor doesnt happen when assign a QGraphicsDropShadowEffect object in qt

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

QGraphicsDropShadowEffect *effectButton1;
QGraphicsDropShadowEffect *effectButton2;

然后我将内存分配给 effectButton1 并调用 setXOffsetsetYOffsetsetBlurRadius 方法来为 effectButton1 对象设置影子选项。

effectButton1 = new QGraphicsDropShadowEffect();
effectButton1->setXOffset(3);
effectButton1->setYOffset(3);
effectButton1->setBlurRadius(7);

现在,我想在使用 new 运算符创建实例时将 effectButton1 对象分配给 effectButton2。如您所知,在以下语句中,复制构造函数必须发生,并且我用 setXOffset(3) 设置的值也必须设置为 effectButton2 内存。但是两个对象的 xOffset() 的 return 值是不同的(对于 effectButton13effectButton2 8) :

effectButton2 = new QGraphicsDropShadowEffect(effectButton1);
QMessageBox::information(this, "", QString("%1").arg(effectButton1->xOffset()));
QMessageBox::information(this, "", QString("%1").arg(effectButton2->xOffset()));

我预计,当我调用 effectButton1->setXOffset(3) 并将 effectButton1 分配给 effectButton2 时,将为 effectButton2 内存设置相同的 XOffset 值,因为复制-构造函数必须发生)。

考虑声明...

effectButton2 = new QGraphicsDropShadowEffect(effectButton1);

这将调用 this constructor...

QGraphicsDropShadowEffect(QObject *parent)

effectButton1 作为 parent 参数。它并不像您所想的那样调用复制构造函数。实际上 QGraphicsDropShadowEffect 没有复制构造函数,因为它继承自 QObject,它是不可复制的。

如果您想在 effectButton2 中复制 effectButton1 的状态,您需要手动复制相应的属性,例如...

effectButton2 = new QGraphicsDropShadowEffect;
effectButton2->setXOffset(effectButton1->xOffset());

等等