C++ Растягивание QLineEdit по центру панели инструментов

Я четыре 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 ничего не отображает справа от RightBar, которому я задал фиксированную ширину. Результат будет точно таким же, если я переверну политики на editor->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Expanding); или если я пропущу вызов функции ввода.

Для визуального понимания того, что я хочу сделать, просто взгляните на Google Chrome, который имеет очень похожий интерфейс:

[ Icon ] [ Icon ] [ ================ Text Field =============== ] [ Icon ] [ Icon ]

Моя версия Qt 5.2.1


person Matt Eskridge    schedule 16.02.2014    source источник
comment
Вам действительно нужно использовать панели инструментов? Это было бы проще с обычными макетами и виджетами.   -  person Pavel Strakhov    schedule 16.02.2014
comment
В итоге я использовал одну панель инструментов с макетом границы, чтобы выровнять все, так как я все равно устанавливал панели инструментов на неподвижность. Спасибо за предложение.   -  person Matt Eskridge    schedule 17.02.2014


Ответы (1)


Чтобы один виджет стал больше других в том же макете, вам нужно растяжение по горизонтали

editor = new QLineEdit();
QSizePolicy sp = editor->sizePolicy();
sp.setHorizontalStretch(1);
editor->setSizePolicy(sp);
addWidget(editor);
person Zlatomir    schedule 16.02.2014