2016-07-22 11 views
0

QGraphicsSceneの中にQGraphicsWidgetQGraphics[Linear]Layoutを使用して、「ウィジェット」のようなノードを作成します。 各ノードにはヘッダーがあり、複数のIOGraphicsWidgetsとフッターがあります。QGraphicsWidgetとQGraphicsLayoutの間隔とサイズ

コード構造:

Code structure

所望レイアウト:

Node layout

現在のコードの結果:

Current result

あなたが見ることができるように、NodeGraphicsWidget(HeaderWidgetの背後にある赤い矩形)は、追加されたすべてのアイテムを含むようにサイズ変更されません。 LayoutItemsの間隔も大きく、m_centerWidgetLayout->setSpacing(0)は何も変更されていません。今、私は自分自身ですべてのレイアウトを書くことを考えていますが、私は標準的なQtを使うことができるより良い方法があることを願っています。

NodeGraphicsWidget:addIOWidget(AbstractIOGraphicsWidget *ioWidget)は、m_centerWidgetLayoutに指定されたAbstractIOGraphicsWidgetを追加するだけです。

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

答えて

0

を私は私の問題への解決策を自分自身を発見しました。最初に私はNodeGraphicsWidgetのルートレイアウトを忘れましたが、それは全体の問題を修正しませんでした。主な問題、項目間の間隔は、実際の問題ではありませんでした。実際の問題は、デフォルトですべてQGraphicsLinearLayoutにマージンがあり、AbstractIOGraphicsWidget root-layoutにそれらのマージンがあることでした。 layout->setContentsMargins(0,0,0,0)が問題を解決しました。

関連する問題