私は C++ Qt 4.6.3 で小さなゲームを開発していますが、レイアウトの問題に遭遇しました。私が探しているレイアウトは、中央のセル (1,1) がメイン ウィジェット (ボード ゲーム) を保持する 3x3 QGridLayout です。(0,1)-セルは、誰の番かを表示する QLabel を保持する必要があります。(1,0) および (1,2) セルは、最大 3 つのスコアボードを保持するために QVBoxLayouts に分割され、(2,1) -cell は、ある種の QLabel も保持します。
これは私がこれまでに得たものです:
QGridLayout *mainLayout = new QGridLayout(this);
QVBoxLayout *leftLayout = new QVBoxLayout;
QVBoxLayout *rightLayout = new QVBoxLayout;
mainLayout->addLayout(leftLayout, 1, 0, AlignTop);
mainLayout->addWidget(topText, 0, 1, AlignCenter);
mainLayout->addWidget(board, 1, 1);
mainLayout->addLayout(bottomText, 2, 1, AlignCenter);
mainLayout->addLayout(rightLayout, 1, 2, AlignTop);
さて、MS Windows(私のGFのラップトップ)で、resizeEvent()
関数を再実装することでこれを解決しました:
void Game::resizeEvent(QResizeEvent *)
{
mainLayout->setRowMinimumHeight(1, 0.8 * height());
mainLayout->setColMinimumWidth(1, 0.8 * height());
// some other stuff
}
これはうまくいきました!ただし、Unix では問題があるようです (または、バージョンの違いが原因でしょうか? 4.6 と 4.8)。メソッドを呼び出すとsetRowMininmumHeight()
、別のサイズ変更イベントが発行され、再帰呼び出しが発生したようです! アプリケーションを両方のプラットフォームで動作させたいので、明らかに別のソリューションを見つける必要がありました。setRowStretch()
私はandをいじりましsetColStretch()
たが、どちらも望ましい結果にはなりませんでした。あらゆる組み合わせを試しましたが、今はかなり行き詰まっています...
この一見簡単な問題を解決できる人はいますか?