QGraphicsView无法扩展

时间:2012-12-19 19:22:45

标签: c++ qt

我很难让QWidgets根据需要进行扩展。这不是我第一次遇到这个问题,上次我通过黑客攻击大尺寸的问题解决了这个问题。这是错误的方法,我真的想学习正确的方法。

如果有人能帮助我,我将不胜感激。这是它的样子和我在代码中编写的布局。如有必要,我可以提供代码。请帮我学习布局。

编辑:第一个布局模拟实际上正常工作。我附加了另一个导致问题的布局模型。

Example Of Resizing


Mock Up of the Layouts


Breaks Expansion


代码。三个班。

MainWindow类:

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

MainCentralWidget类:

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类:

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);
}

1 个答案:

答案 0 :(得分:2)

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);
}

main_layoutSetupLayout完成后立即销毁,因为它超出了范围。实际上,您的SubWidget没有任何布局。这就是为什么窗口小部件显示不正确的原因。