4

レイアウトとサイズのポリシーに関しては、私はあまり得意ではありませんでしたので、これはおそらく簡単な答えですが、ここで説明します。

新しいタブを QTabWIdget に追加し、ウィジェットを QSplitter に設定すると、スプリッターは指定されたスペース全体を使用します。ただし、QSplitter を QWidget 内に配置し、QWidget を使用してタブを追加すると、指定されたスペースは使用されず、スプリッターのサイズのみが使用されます。

スプリッター内に必要なすべてのウィジェットがあるため、QLayout から離れたいと思います。QWidget にタブ内のすべてのスペースを使用させるだけです (QSplitter が QWIdget 内のすべてのスペースを使用できるようにする必要があります)。

比較と結果を示すサンプルを以下に作成しました。短い質問 - シナリオ 1 (「タブ 1」内) をシナリオ 2 (「タブ 2」) のように表示し、Spliiter に親 QWidget を使用するにはどうすればよいですか?

ui->setupUi(this);
QTabWidget* pTab = new QTabWidget(this);
this->setCentralWidget(pTab);

//Splitter belongs to a QWidget, which belongs to the Tab. Does not use all space
QWidget* pWidget = new QWidget(this);
QSplitter* pSplitter = new QSplitter(pWidget);

QListWidget* pList = new QListWidget(this);
QListWidget* pList2 = new QListWidget(this);
pSplitter->addWidget(pList);
pSplitter->addWidget(pList2);
pTab->addTab(pWidget, "Tab One");

//Splitter belongs to the Tab. Uses all space
QListWidget* pList3 = new QListWidget(this);
QListWidget* pList4 = new QListWidget(this);

QSplitter* pSplitter2 = new QSplitter(this);
pSplitter2->addWidget(pList3);
pSplitter2->addWidget(pList4);
pTab->addTab(pSplitter2, "Tab Two");

最終結果

4

1 に答える 1

5

これを変える:

QWidget* pWidget = new QWidget(this);
QSplitter* pSplitter = new QSplitter(pWidget);

これに:

QWidget* pWidget = new QWidget(this);
QVBoxLayout* layout = new QVBoxLayout(pWidget);
QSplitter* pSplitter = new QSplitter(pWidget);
layout->addWidget(pSplitter);
于 2012-08-11T03:43:07.023 に答える