Интервалы и размеры QGraphicsWidget и QGraphicsLayout

Я использую QGraphicsWidget а также QGraphics[Linear]Layout внутри QGraphicsScene создать узел типа "Виджет". Каждый узел имеет заголовок, несколько IOGraphicsWidgets и нижний колонтитул.

Структура кода:

Структура кода

Требуемый макет:

Макет узла

Результат текущего кода:

Текущий результат

Как вы можете видеть NodeGraphicsWidget (красный прямоугольник за HeaderWidget) не изменяется, чтобы содержать все элементы, добавленные к нему. Расстояние между LayoutItems также огромен и m_centerWidgetLayout->setSpacing(0) ничего не изменилось. Прямо сейчас я думаю написать все макеты самостоятельно, но я надеюсь, что есть лучший способ использовать стандартный qt.

NodeGraphicsWidget:addIOWidget(AbstractIOGraphicsWidget *ioWidget) просто добавляет данное AbstractIOGraphicsWidget к m_centerWidgetLayout,

Конструктор NodeGraphicsWidget:

NodeGraphicsWidget::NodeGraphicsWidget(NodeGraphicsWidget::WidgetCreationFunction headerCreationFunc, NodeGraphicsWidget::WidgetCreationFunction footerCreationFunc, QGraphicsItem *parent, Qt::WindowFlags wFlags):
    QGraphicsWidget(parent, wFlags)
{
    m_headerWidget = new QGraphicsWidget(this);
    m_centerWidget = new QGraphicsWidget(this);
    m_centerWidgetLayout = new QGraphicsLinearLayout(Qt::Orientation::Vertical, m_centerWidget);
    m_centerWidgetLayout->setSpacing(0);
    m_centerWidget->setLayout(m_centerWidgetLayout);
    m_footerWidget = new QGraphicsWidget(this);


    headerCreationFunc(this, m_headerWidget);
    if(footerCreationFunc != nullptr){
        footerCreationFunc(this, m_footerWidget);
    }

    setAutoFillBackground(true);

    QPalette pal;

    pal.setColor(QPalette::Window, QColor(Qt::red));

    this->setPalette(pal);

}

Чтобы увидеть полный исходный код посетите: https://github.com/nidomiro/QtNodes/tree/f5426c154a4938481f00031f031507499cc0e183/src

1 ответ

Решение

Я нашел решение своей проблемы сам. Сначала я забыл корневой макет NodeGraphicsWidget но это не решило всю проблему. Основная проблема, расстояние между предметами, не было реальной проблемой. Настоящая проблема заключалась в том, что каждый QGraphicsLinearLayout имеет запас по умолчанию и AbstractIOGraphicsWidget Корневой макет имел эти поля. layout->setContentsMargins(0,0,0,0) решил проблему.

Другие вопросы по тегам