1

必要に応じて QWidgets を拡張するのに非常に問題があります。この問題に遭遇したのはこれが初めてではなく、前回は大きな sizeHint() をハッキングして解決しました。これは間違ったアプローチであり、私は正しいアプローチを学びたいと思っています.

誰かが私を助けることができれば、それは大歓迎です。これがどのように見えるか、そして私がコードで書いたレイアウトです。必要に応じて、コードを提供できます。レイアウトの学習を手伝ってください。

編集:最初のレイアウトのモックアップは実際には正しく機能します。問題を引き起こす別のレイアウト モックアップを添付しています。

リサイズ例


レイアウトのモックアップ


ブレークス エクスパンション


コード。3 つのクラス。

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

1 に答える 1

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_layoutに破棄されます。SetupLayoutしたがって、実際には、SubWidgetレイアウトはありません。そのため、ウィジェットが正しく表示されません。

于 2012-12-19T20:07:15.230 に答える