3

スプリッターハンドルの上部にボタン(または他のウィジェット)を配置する問題に直面した人はいますか?ハンドルを取得し、レイアウトを設定し、そこにコントロールを配置しようとしましたが、奇妙な外観になりました。

私の主な目標は、以下に示すようなセレクターダイアログを作成することです。ダイアログの例

私が得るもの:
ここに画像の説明を入力してください

コード:

QDialog dialog = new QDialog();
dialog.setLayout(new QVBoxLayout());
QSplitter splitter = new QSplitter();

splitter.setSizePolicy(new QSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.Fixed));
splitter.addWidget(new QListWidget());
splitter.addWidget(new QTableWidget());
dialog.layout().addWidget(splitter);

QSplitterHandle h = splitter.handle(1);
h.setFixedWidth(30); // I added this line to show the splitter handle
QVBoxLayout lt = new QVBoxLayout();
lt.setSpacing(0);
lt.setMargin(0);
lt.addWidget(new QPushButton("Hello", dialog));
lt.addWidget(new QPushButton("Good bye", dialog));
h.setLayout(lt);

dialog.show();
4

1 に答える 1

2

これにより、より良い結果が得られます。

// h.setFixedWidth(30);
splitter.setHandleWidth(30);

より良い結果を得るには、QSplitterHandleをサブクラス化して再実装することをお勧めしsizeHint()ます。QSplitterHandleのドキュメントを確認してください。

レイアウト設定を変更して、ボタンの正確な位置を取得できます。例えば:

lt.addStrecth();

「レリーフ」バーを削除するには、QSplitterHandleからサブクラス化して再実装する必要がありますpaintEvent()

于 2012-01-12T10:16:51.073 に答える