QGraphicsLinearLayout не выравнивает виджеты, как ожидалось - PullRequest
0 голосов
/ 23 марта 2020

У меня есть QGraphicsScene, в который я добавил QGraphicsWidget.

Первоначально я настроил виджет таким образом

 AGraphicsWidget::AGraphicsWidget( QGraphicsItem* parent, QGraphicsScene* scene )
        : QGraphicsWidget( parent )
        , m_mainLayout( new QGraphicsLinearLayout( Qt::Vertical ) )
        , m_titleLabel( new QLabel( "Title" ) )
        , m_executionPin( new NodeExecutionPin() )

    {
        setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
        setGraphicsItem( this );
        setFlag( ItemIsMovable, true );

        m_mainLayout->setInstantInvalidatePropagation( true );

        auto* labelProxy = scene->addWidget( m_titleLabel );
        auto* secondLabel = scene->addWidget( new QLabel( "Subtitle" ) );
        auto* button = scene->addWidget( new QPushButton( "Another" ) );

        m_mainLayout->addItem( labelProxy );
        m_mainLayout->addItem( secondLabel );
        m_mainLayout->addItem( button );
        setLayout( m_mainLayout );
    }

Эта установка не выполняет то, что я ожидаю, что было бы вертикально выровненный набор виджетов вместо этого я получаю это

enter image description here

Однако, когда я добавляю текст, редактируем как последний элемент как этот

AGraphicsWidget::AGraphicsWidget( QGraphicsItem* parent, QGraphicsScene* scene )
        : QGraphicsWidget( parent )
        , m_mainLayout( new QGraphicsLinearLayout( Qt::Vertical ) )
        , m_titleLabel( new QLabel( "Title" ) )
        , m_executionPin( new NodeExecutionPin() )

    {
        setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
        setGraphicsItem( this );
        setFlag( ItemIsMovable, true );

        m_mainLayout->setInstantInvalidatePropagation( true );

        auto* labelProxy = scene->addWidget( m_titleLabel );
        auto* secondLabel = scene->addWidget( new QLabel( "Subtitle" ) );
        auto* button = scene->addWidget( new QPushButton( "Another" ) );
        auto* edit = scene->addWidget( new QTextEdit() );

        m_mainLayout->addItem( labelProxy );
        m_mainLayout->addItem( secondLabel );
        m_mainLayout->addItem( button );
        m_mainLayout->addItem( edit );
        setLayout( m_mainLayout );

    }

enter image description here

Это работает, как и ожидалось, я получаю красивую вертикальную компоновку, я получаю то же несогласование, что и выше, если я пытаюсь вложить любые QGraphicsLinearLayouts дальше, где они будут перекрываться каждый Другое, что здесь происходит?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...