Я четыре QToolBars, которые размещены как таковые:
addToolBar(new BarLeft());
addToolBar(new SearchBar());
addToolBar(new BarRight());
addToolBarBreak();
addToolBar(new BottomBar());
На левой панели есть несколько значков. На правой тоже есть несколько значков. Центральная панель содержит текстовое поле, которое я хочу растянуть на 100% между двумя другими панелями инструментов. QT автоматически растянет самую последнюю панель инструментов через пустое пространство, если вы не укажете иначе. Я нашел результаты, говорящие мне сделать следующее, но это не сработало.
SearchBar::SearchBar() {
setMovable(false);
editor = new QLineEdit();
editor->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
addWidget(editor);
}
В результате поле заполняется по вертикали, но Qt ничего не отображает справа от правой панели, которую я дал фиксированной ширине. Результат точно такой же, если я переверну политику, чтобы editor->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Expanding);
или если я пропущу вызов функции ввода.
Для наглядного представления о том, что я хочу сделать, просто взгляните на Google Chrome, который имеет очень похожий интерфейс:
[ Icon ] [ Icon ] [ ================ Text Field =============== ] [ Icon ] [ Icon ]
Моя версия Qt 5.2.1
Чтобы один виджет стал больше других в том же макете, вам нужно горизонтальное растяжение
editor = new QLineEdit();
QSizePolicy sp = editor->sizePolicy();
sp.setHorizontalStretch(1);
editor->setSizePolicy(sp);
addWidget(editor);
Других решений пока нет …