Constantin
Constantin

Reputation: 17758

QGraphicsView Won't Expand

I'm having extreme trouble getting QWidgets to expand as needed. This isn't the first time I've run into this problem, and last time I solved it by hacking in a large sizeHint(). This is the WRONG approach and I would really like to learn the CORRECT approach.

If anyone could help me out it would be greatly appreciated. Here's what it looks like and the layouts I have written in code. If necessary I can supply the code. Please help me learn Layouts.

Edit: The first layout mock up actually works correctly. I am attaching another layout mockup which causes a problem.

Example Of Resizing


Mock Up of the Layouts


Breaks Expansion


Code. Three classes.

MainWindow Class:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    QWidget * w = new MainCentralWidget(this);
    setCentralWidget(w);
}

MainCentralWidget Class:

MainCentralWidget::MainCentralWidget(QWidget *parent) :
    QWidget(parent)
{
    SetupLayout();
}

void MainCentralWidget::SetupLayout()
{
    QVBoxLayout * main_layout;
    QFormLayout * plugin_layout;

    //Start
    main_layout = new QVBoxLayout();

    //Setup the plugin chooser
    plugin_layout = new QFormLayout();
    QComboBox * plugins_box = new QComboBox();

    plugin_layout->addRow("Choose Plugin: ", plugins_box);

    QFrame* line = new QFrame();
    line->setFrameShape(QFrame::HLine);
    line->setFrameShadow(QFrame::Sunken);
    plugin_layout->addRow(line);

    main_layout->insertLayout(0, plugin_layout);

    main_layout->insertWidget(1, new SubWidget());

    //Finish
    setLayout(main_layout);

    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
}

SubWidget Class:

SubWidget::SubWidget(QWidget *parent) :
    QWidget(parent)
{
    setStyleSheet("QWidget { background: yellow }");

    setMaximumSize(10000,10000);
    setMinimumSize(100,100);
    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    SetupLayout();


    //setMaximumSize(10000,10000);
}

void SubWidget::SetupLayout()
{
    QHBoxLayout main_layout;

    main_layout.setAlignment(Qt::AlignTop | Qt::AlignLeft);
    main_layout.addWidget(&m_graphics_view);
    m_graphics_view.setMaximumSize(10000,100000);

    setLayout(&main_layout);
}

Upvotes: 1

Views: 862

Answers (1)

Lol4t0
Lol4t0

Reputation: 12547

void SubWidget::SetupLayout()
{
    QHBoxLayout main_layout;

    main_layout.setAlignment(Qt::AlignTop | Qt::AlignLeft);
    main_layout.addWidget(&m_graphics_view);
    m_graphics_view.setMaximumSize(10000,100000);

    setLayout(&main_layout);
}

Your main_layout gets destroyed immediately after SetupLayout finished, as it goes out of scope. So, actually, your SubWidget has no any layout. That is why widgets are shown incorrectly.

Upvotes: 2

Related Questions