Как установить скроллинг для виджета

158
17 декабря 2018, 02:20

Делаю виджет — диаграмму времени, которая будет отображать посчитанные моменты времени для разных групп объектов:

Высота (количество строк) будет задаваться количеством групп. Сам виджет должен иметь фиксированную высоту и ширину, однако если групп моментов будет больше, чем возможность отобразить на виджете заданной высоты, то должен быть вертикальный скролл. Аналогично, если объектов хотя бы в одной группе больше, чем сейчас отображено, то должен быть горизонтальный скролл.

Вопрос номер ноль: Как виджету задать фиксированный размер, выходя за который появлялся бы скролл по строкам клеточек. Но если Количество этих строк умещалось бы, то отрисовка на нижней границе виджета.

Вопрос номер один: Как прикрутить скролл к моему виджету?

Вопрос номер два: Окно, в котором будет отображаться эта временная диаграмма, не будет иметь возможности ресайза, всегда постоянный размер. Нужно ли делать layout?

Пока всё выглядит так для двух групп объектов:

.h файл диаграммы:

#pragma once
#include <QWidget>
#include <qscrollarea.h>
class TimeDiagram : public QWidget {
    Q_OBJECT
public:
    explicit TimeDiagram(QWidget *parent = nullptr);
    virtual ~TimeDiagram();
    void draw( QPainter  *painter);
    unsigned int getRowHeight();
    QScrollArea *diagramArea;
protected:
    void paintEvent(QPaintEvent *event);
};

Отрисовка при создании окна:

GraphicScaleDialog::GraphicScaleDialog(OutputData *outputData, QWidget *parent) :
    QDialog(parent),
    ui(new Ui::GraphicScaleDialog) {
    ui->setupUi(this);
    data = outputData;
    diagramWidget = new TimeDiagram();
    diagramWidget->diagramArea = new QScrollArea(this);
    unsigned int height = diagramWidget->getRowHeight() * data->outputSettings.flowQuantity;
    diagramWidget->diagramArea->setGeometry(30, 50, 1080, static_cast<int>(height));
    diagramWidget->diagramArea->setWidget(diagramWidget);
    diagramWidget->diagramArea->setWidgetResizable(true);
}
Answer 1
QScrollArea* area = new QScrollArea;
area->addWidget(pointerToyourWidget);
area->show();
READ ALSO
Как получить значение свойства объекта?

Как получить значение свойства объекта?

Есть два класса, Товары и Отделы (департамент), и их интерфейсы (свои сеттеры и геттеры)При добавлении товара сразу можно указать, к какому...

156
Подгрузка One-to-Many и Many-to-Many ассоциаций в Hibernate

Подгрузка One-to-Many и Many-to-Many ассоциаций в Hibernate

Есть сущность (1), у которой есть ассоциации один ко многим к другим сущностям (2)

152
отображение фотографии из mysql

отображение фотографии из mysql

пишу программу который позволяет добавить вопрос с нескольким файлом модель состоит из этих полей

135