2009-12-06 18 views
1

簡單的問題(我希望!)。這是我的第一個Qt應用程序,我正在爲如何在我的Gui上添加元素而苦苦掙扎。如何在我的Qt應用程序中對小部件進行分組?

我需要爲每個文件對象,其可以被添加或刪除的動態約8標準QWidgets(標籤,編輯,按鈕)。

所以,最後,我需要把所有的文件對象QVBoxLayout內QScrollArea內。

但首先我需要他們莫名其妙組。我意識到我可以在我的主窗口上繪製大量的偏移量,但它不會很優雅。

如何讓我的File對象擴展某種畫布並且每個人都維護它自己的一組小部件?

感謝您的任何指導。

回答

5

一個QWidget可以有一個佈局,並含有其它構件。所以你可以子類QWidget,添加你需要的任何東西(以及一個佈局),並在任何你想要的地方使用。甚至更好(我想,根據您的需求)是直接繼承QScrollArea,添加你所需要的,包括佈局,那麼您可以在批發砸:

class MyWidget : public QScrollArea 
{ 
Q_OBJECT 
public: 
    MyWidget(const QString& filename, QWidget* parent = 0); 
}; 

MyWidget::MyWidget(const QString& filename, QWidget* parent) : QScrollArea(parent) 
{ 
    setWidgetResizable(true); 

    QWidget* central = new QWidget(this); 
    setWidget(central); 

    QVBoxLayout* layout = new QVBoxLayout(central); 
    central->setLayout(layout); 

    layout->addWidget(new QLabel(filename, central)); 
    layout->addWidget(new QLineEdit("editor 1", central)); 
    layout->addWidget(new QLineEdit("editor 2", central)); 
    layout->addWidget(new QLineEdit("editor 3", central)); 
    layout->addWidget(new QLineEdit("editor 4", central)); 
    layout->addWidget(new QLineEdit("editor 5", central)); 
    layout->addStretch(); 
} 

然後使用它:

MyWidget* widget1 = new MyWidget("/file1", parent); 
MyWidget* widget2 = new MyWidget("/file2", parent); 
layout->addWidget(widget1); 
layout->addWidget(widget2); 
+0

謝謝!不完全是我想要做的,但我改編了這個。我做了一個擴展QScrollBar的FilePanel類,然後我動態地向它添加FileItems。 FileItems在其中包含Widgets的佈局,因此我將該佈局添加到(中央)所擁有的佈局中。現在唯一的問題是,當它在已經初始化之後添加一個時,它不繪製任何東西。 – graw

+0

好吧,我現在正在工作,謝謝!是的,它很有趣,您可以在佈局中的小部件中的摺疊佈局中的佈局中嵌套小部件等。:) – graw

相關問題