qt - Как мне сделать сплиттер с набором кнопок на нем?

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

Моя основная цель — создать диалог выбора, как показано ниже:Пример диалога

Что я получаю:
введите здесь описание изображения

Код:

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

person Andrey Atapin    schedule 12.01.2012    source источник
comment
У меня нормально работает. Можете ли вы опубликовать свой скриншот?   -  person graphite    schedule 12.01.2012
comment
Какую версию Jambi вы используете?   -  person Smar    schedule 13.01.2012
comment
Я предлагаю использовать 4.6 (или даже 4.7, если вы используете Windows) сейчас, Nokia больше не будет поддерживать Jambi, и это (4.5.2) не выпуск сообщества, поэтому мы не знаем о его причудах. .   -  person Smar    schedule 13.01.2012


Ответы (1)


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

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

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

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

lt.addStrecth();

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

person graphite    schedule 12.01.2012
comment
Немного лучше, но пока не подходит. Знаете ли вы, как избежать разделения виджетов рельефом ручки? - person Andrey Atapin; 12.01.2012
comment
@AndreyAtapin Это не влияет на виджеты. Положения кнопок контролируются макетом. - person graphite; 12.01.2012
comment
@AndreyAtapin Я использую Gentoo Linux и Qt 4.7.4. - person graphite; 13.01.2012
comment
спасибо, добавление растяжки работает, хотя я не понимаю магии :) Я имел в виду, что рельефная полоса вставляется между кнопками (см. скриншот). Кажется, это зависит от ОС. Теперь проблема как убрать эту полосу - person Andrey Atapin; 13.01.2012
comment
@AndreyAtapin QSplitterHandle просто рисует рельеф ручки в paintEvent, в остальном это простой QWidget. - person graphite; 13.01.2012
comment
давайте продолжим это обсуждение в чате - person graphite; 13.01.2012