2013-07-26 3 views
3

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

ответ

2

Вместо вставки вертикальных макетов непосредственно в горизонтальной компоновки верхнего уровня, используйте контейнер виджетов легко управлять видимостью:

// Create your left and right widgets 
QWidget* leftWidget = new QWidget(); 
QVBoxLayout* leftLayout = new QVBoxLayout(leftWidget); 
QWidget* rightWidget = new QWidget(); 
QVBoxLayout* rightLayout = new QVBoxLayout(rightWidget); 

// Populate your vertical layouts here ... 

QHBoxLayout* horizontalLayout = new QHBoxLayout(parentWidget); 
horizontalLayout->addWidget(leftWidget); 
horizontalLayout->addWidget(rightWidget); 

Тогда вы можете просто скрыть или показать leftWidget или rightWidget эффективно управлять видимостью все в вертикальных макетах, которые у вас есть, без необходимости скрывать/показывать каждый отдельный виджет.

0

Мое предложение:

// l is the layout pointer 
for (int i = 0; i != l->count(); ++i) { 
    QWidget* w = qobject_cast<QWidget*>(l->itemAt(i)); 
    if (w != 0) { 
    w->setVisible(false); // hides the widget 
    } 
    else { 
    // do some recursive things with the layout 
    } 
} 

(Надеюсь, что это работает;))

Виджет в основном невидимо.

+0

Такой подход может работать, за исключением того, что вы будете явно устанавливать видимость для каждого виджета. Если некоторые из этих виджетов уже были скрыты, тогда вам придется быть осторожными, когда вы снова сделаете их видимыми. В этом случае гораздо проще использовать родительский виджет для контроля видимости. – jmk

2

Как @jmk сказал, вам нужно использовать QWidget. Я просто добавлю, что это очень легко превратить существующую горизонтальную или вертикальную компоновку в виджет с помощью Qt Designer, щелкнув правой кнопкой мыши на нем и выбрав Morph Into-> QWidget:

enter image description here

Раскладка полностью но теперь вы можете показать/скрыть макет, потому что это обычный виджет с этим макетом.

Смежные вопросы