我正在使用QWidget,我想在其中添加一些分隔线。 作为分隔线,我正在使用此
QFrame *seperatorLine = new QFrame(_toolBar);
seperatorLine->setFrameStyle(QFrame::Sunken | QFrame::VLine);
我需要几个分隔符行,我很好奇每次是否需要创建一个新的QFrame
,或者是否有办法重用一个(或使用复制构造函数)。
当线只在最后一个位置时,我将其添加到QWidget
。
答案 0 :(得分:3)
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;
}