我正在使用 QWidget,我想在其中放置一些分隔线。作为分隔线,我正在使用它
QFrame *seperatorLine = new QFrame(_toolBar);
seperatorLine->setFrameStyle(QFrame::Sunken | QFrame::VLine);
我需要几条分隔线,我很好奇我是否需要QFrame
每次都创建一个新的,或者是否有办法重用一个(或使用复制构造函数)。
目前该行仅位于我将其添加到的最后一个位置QWidget
。
QObject
因此QWidget
派生类无法访问复制构造函数。
取而代之的是,您可以将 QFrame 属性封装在一个小工厂方法中:
QFrame* createSeparator(QWidget* parent=0) {
QFrame *separatorLine = new QFrame(parent);
separatorLine->setFrameStyle(QFrame::Sunken | QFrame::VLine);
return separatorLine;
}
我更喜欢这种方法而不是继承 QFrame 来调整 QFrame 实例的几个属性
“克隆” QObject 的一种奇特方法是创建一个新对象并分配所有声明的属性。当然,它仅在您想传输值时才有用:
CustomObject* CustomObject::clone() {
int count = metaObject()->propertyCount();
CustomObject* clone = new CustomObject(this->parent());
for (int i = 0; i < count; i++) {
const char* prop = metaObject()->property(i).name();
clone->setProperty(prop, property(prop));
}
return clone;
}