简单的问题(我希望!)。这是我的第一个Qt应用程序,我正在努力解决如何在我的Gui上使用元素组。
每个File对象需要大约8个标准QWidgets(标签,编辑,按钮),可以动态添加或删除。
所以最终我需要将所有File对象放在QSBoxLayout中的QSBoxLayout中。
但首先我需要以某种方式对它们进行分组。我意识到我可以在我的主窗口上用很多偏移来绘制它们,但它不会很优雅。
如何让我的File对象扩展某种画布并且每一个都维护它自己的一组小部件?
感谢任何指导。
答案 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);