Как сгруппировать виджеты в моем приложении Qt? - PullRequest
1 голос
/ 06 декабря 2009

Простой вопрос (надеюсь!). Это мое первое приложение на Qt, и я борюсь за то, чтобы на моем графическом интерфейсе были группы элементов.

Мне нужно около 8 стандартных QWidget (ярлыков, правок, кнопок) для каждого объекта File, которые можно динамически добавлять или удалять.

Так что в конечном итоге мне нужно поместить все объекты File внутри QVBoxLayout внутри QScrollArea.

Но сначала мне нужно как-то сгруппировать их. Я понимаю, что могу нарисовать их все в своем главном окне с большим количеством смещений, но это будет не очень элегантно.

Как сделать так, чтобы мой объект File расширялся своего рода канвой , и каждый из них поддерживает свой собственный набор виджетов?

Спасибо за любые рекомендации.

1 Ответ

5 голосов
/ 06 декабря 2009

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

Затем использовать его:

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