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

gra*_*raw 1 layout user-interface qt widget

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

我需要为每个File对象提供大约8个标准QWidgets(标签,编辑,按钮),可以动态添加或删除它们.

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

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

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

谢谢你的指导.

Ada*_*kin 5

A 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();
}
Run Code Online (Sandbox Code Playgroud)

然后使用它:

MyWidget* widget1 = new MyWidget("/file1", parent);
MyWidget* widget2 = new MyWidget("/file2", parent);
layout->addWidget(widget1);
layout->addWidget(widget2);
Run Code Online (Sandbox Code Playgroud)