1

我正在使用 QWidget,我想在其中放置一些分隔线。作为分隔线,我正在使用它

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

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

目前该行仅位于我将其添加到的最后一个位置QWidget

4

1 回答 1

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;
}
于 2014-07-08T08:43:36.773 回答