У меня есть виджет (давайте назовем его основным), который должен отображать еще два виджета.Я использую QGridLayout , чтобы расположить эти два виджета в основном виджете.(Это просто упрощено. У меня действительно есть 5 виджетов в главном окне)
Изначально эти два виджета имеют одинаковый размер, но они могут масштабироваться.Например, второй виджет должен отображаться в 2, 3 или 4 раза больше, чем первый виджет, но должны отображаться оба.
Примерно так:
Я пытался использовать addWidget , с растяжением 2-го виджета по строкам и столбцам, но это не сработало какожидается (размеры виджета остались прежними)
Итак, как бы вы предложили мне достичь в соответствии с просьбой?Если QGridLayout не тот класс, что я должен использовать?
РЕДАКТИРОВАТЬ:
Некоторые типы:
... struct info {int item;int row;столбец int;int rowSpan;int columnSpan;} typedef std :: vector LayoutDefinition;...
Класс WindowsContainer содержит это:
vector< QWidget* > containers;
Вот метод, который обновляет макет:
void WindowsContainer::SetNewLayout( const LayoutDefinition & newLayoutDef )
{
// hide all containers
for ( std::vector< QWidget* >::iterator it = containers.begin(); containers.end() != it; ++ it )
{
(*it)->hide();
}
// remove all items in the layout, and release the layout
QLayout * currentLayout( layout() );
if ( 0 != currentLayout )
{
// remove all items in the layout
// (this code is taken from the reference page for the QLayout::takeAt() function)
QLayoutItem *child;
while ( ( child = currentLayout->takeAt( 0 ) ) != 0 )
{
delete child;
}
}
delete( currentLayout );
// form the new layout
QGridLayout *newLayout = new QGridLayout( this );
newLayout->setSpacing( 0 );
newLayout->setContentsMargins( 0, 0, 0, 0 );
for ( LayoutDefinition::const_iterator it = newLayoutDef.begin(); newLayoutDef.end() != it; ++ it )
{
QWidget * w( containers.at( it->item ) );
newLayout->addWidget( w,
it->row,
it->column,
it->rowSpan,
it->columnSpan
);
w->show();
}
// update the layout of this object
setLayout( newLayout );
}
Все это работает, пока я не попытаюсьустановить rowSpan и columnSpan.Оба изображения по-прежнему занимают один и тот же размер области.
Я также пробовал с проставками, но это не сработало (не уверен, правильно ли я это сделал).