QT - Как мне сделать сплиттер с набором кнопок на нем? - PullRequest
3 голосов
/ 12 января 2012

Кто-нибудь сталкивался с проблемой размещения кнопок (или любых других виджетов) на верхней части ручки сплиттера? Я пытался получить ручку, установить ее расположение и поместить туда элементы управления, но я выглядел немного странно.

Моя главная цель - создать диалоговое окно селектора, как показано ниже: Dialog example

Что я получаю:
enter image description here

Код:

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

1 Ответ

2 голосов
/ 12 января 2012

Это дает лучший результат:

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

Для лучшего результата я бы предложил создать подкласс QSplitterHandle и переопределить sizeHint(). Просмотрите документацию QSplitterHandle .

Вы можете изменить настройки макета, чтобы получить точные положения кнопок. Например:

lt.addStrecth();

Чтобы удалить "рельефную" панель, вы должны создать подкласс QSplitterHandle и переопределить paintEvent().

...