Qt: QSplitter, повторить размеры

Когда приложение запущено, но еще во время создания (когда создается весь начальный виджет и т. Д.), Я добавляю в свой макет QSplitter, с двумя виджетами, и я хочу, чтобы второй виджет занимал более или менее 60/70% доступного пространства, в то время как первый виджет занимает оставшееся пространство (принимая во внимание сам размер разделителя).

Итак, в начале, перед тем, как показывать само окно, я пытаюсь перенастроить эти два виджета примерно так:

splitter->setOrientation(Qt::Vertical);
auto sizes = splitter->sizes();

int& first_w = sizes.front(); // == 0
int& second_w = sizes.last(); // == 0
int diff = form_w * 2.3 - tbl_w; (30% * 2.3 = ~70%)

second_w += diff;
first_w -= diff;

splitter->setSizes(sizes);

Но, first_w а также second_w содержит 0 а также 0, Я не знаю, потому что размеры еще не были рассчитаны, или потому что виджет еще не отображается (окно не отображается) и размеры виджетов невидимых 0,

Что я могу сделать, чтобы получить «будущие» размеры этих виджетов? splitter находится внутри QVBoxLayout, а доступное пространство виджета владельца — это более или менее все вертикальное пространство окна (есть только QTabBar выше виджета, владеющего этим QVBoxLayoutи немного отступов в окне).

0

Решение

Согласно документы следующее должно делать правильно …

splitter->setSizes(QList<int>() << 30 << 70);

Если QSplitter вертикальный, который должен распределить 30% к верхнему виджету и 70% к нижнему.

1

Другие решения

Метод QSplitter::sizes() кажется, дает ненулевые размеры только тогда, когда виджет отображается. То, что я обычно делаю, чтобы обойти эту проблему, переопределить QWidget::showEvent(QShowEvent *event) и вызвать метод QSplitter::setSizes() там.

0

По вопросам рекламы [email protected]