如何在我的Qt应用程序中对小部件进行分组?

时间:2009-12-06 04:27:20

标签: user-interface qt layout widget

简单的问题(我希望!)。这是我的第一个Qt应用程序,我正在努力解决如何在我的Gui上使用元素组。

每个File对象需要大约8个标准QWidgets(标签,编辑,按钮),可以动态添加或删除。

所以最终我需要将所有File对象放在QSBoxLayout中的QSBoxLayout中。

但首先我需要以某种方式对它们进行分组。我意识到我可以在我的主窗口上用很多偏移来绘制它们,但它不会很优雅。

如何让我的File对象扩展某种画布并且每一个都维护它自己的一组小部件?

感谢任何指导。

1 个答案:

答案 0 :(得分: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);