2014-07-08 44 views
1

我正在使用QWidget,我想在其中放置一些分隔線。 作爲分割線我用這是否可以多次使用一個QFrame?

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

我需要一些分割線,我很好奇,我是否需要創建一個新的QFrame每次或是否存在重複使用一個方法(或使用拷貝構造函數)。

此刻該行僅在最後一個位置,我將它添加到QWidget

+3

我相信每個GUI元素應該用'QFrame'(QWidget中)的一個單獨的實例來表示,所以你需要幾個分隔線。 – vahancho

回答

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; 
} 
+0

謝謝,這個工程。 我想過這個解決方案,但想知道是否有任何奇特的Qt方式。 錯誤'separatorLine'。你可能想在你的答案中改變它。 – user2699453

相關問題