可以多次使用一个QFrame吗?

时间:2014-07-08 08:32:48

标签: qt separator qframe

我正在使用QWidget,我想在其中添加一些分隔线。 作为分隔线,我正在使用此

QFrame *seperatorLine = new QFrame(_toolBar);
seperatorLine->setFrameStyle(QFrame::Sunken | QFrame::VLine);

我需要几个分隔符行,我很好奇每次是否需要创建一个新的QFrame,或者是否有办法重用一个(或使用复制构造函数)。

当线只在最后一个位置时,我将其添加到QWidget

1 个答案:

答案 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;
}