Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

How to create a "corner" widget with Qsplitter or so



  • Hi all,

    I'd like to obtain a layout in which I have 2 widgets of which one is placed in a corner, see the image below:

    !http://i.imgur.com/H27WY.png(corner layout)!

    Ideally, the 2 red lines would be QSplitter, so that the corner widget would be resizable.
    Is it possible to obtain such a layout??
    thank you.
    Ricky



  • You mean two overlapping widgets? Then you should check out "QStackedLayout":http://qt-project.org/doc/qt-4.8/qstackedlayout.html and set the QStackedLayout::StackingMode to QStackedLayout::StackAll.

    @
    QStackedLayout* mainLayout = new QStackedLayout;
    mainLayout->setStackingMode( QStackedLayout::StackAll );

    QWidget* greaterWidget = new QWidget;
    mainLayout->addWidget( greaterWidget );

    QWidget* cornerWidget = new QWidget;
    QWidget* alignmentWidget = new QWidget;
    QGridLayout* alignmentLayout = new QGridLayout( alignmentWidget );
    alignmentLayout->addWidget( cornerWidget, 0, 0, Qt::AlignRight | Qt::AlignBottom );

    mainLayout->addWidget( alignmentWidget );
    mainLayout->setCurrentWidget( alignmentWidget );
    @

    The alignmentWidget is needed to position the corner widget at the bottom-right, since QStackedLayout's insertWidget function doesn't allow for specifying the alignment of the widget being added.



  • Hi Napaje,

    thanks for your hint.
    I'm probably missing something to have your code working on my side.
    I had to add a Box Layout above the Stacked one to see something appear.
    But it works only when I use StackOne, when I use StackAll and add the 2 widgets (greater and corner) I get nothing.
    I've also tried to specify manually the geometry of the cornerWidget but nothing changes.

    Anyway I got the idea, but in the configuration you suggest would the red borders be movable, so to allow the cornerWidget to be resized?

    Thank you!
    Ricky


Log in to reply