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

Posted

技术标签:

【中文标题】如何在我的 Qt 应用程序中对小部件进行分组?【英文标题】:How to group Widgets in my Qt app? 【发布时间】:2009-12-06 04:27:20 【问题描述】:

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

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

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

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

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

感谢您的指导。

【问题讨论】:

【参考方案1】:

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);

【讨论】:

谢谢!不完全是我想要做的,但我适应了这个。我创建了一个扩展 QScrollBar 的 FilePanel 类,然后动态地将 FileItems 添加到它。 FileItems 中包含带有小部件的布局,因此我将该布局添加到由 (central) 持有的 (layout) 中。现在唯一的问题是当我在它已经初始化后添加一个时它不会绘制任何东西。 好的,我现在开始工作了,谢谢!是的,有趣的是如何在布局中嵌套布局中的布局中的布局中的布局中的布局中的小部件等。:)

以上是关于如何在我的 Qt 应用程序中对小部件进行分组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的代码中查明触发 QObject::connect 的调用的位置:无法在 Qt5 中对类型的参数进行排队?

在我的 SQL 中对小于 10 的约束进行分组

如何在集成到 android 应用程序的leanplum A/B 测试中对用户集进行分组?

如何避免鼠标单击一个小部件触发 Qt 中其他小部件的信号?

Windows XP 上的 QT 小部件

如何从相关表中对 SQL 中的结果进行分组?