Como fazer um Qt Widget crescer com o tamanho da janela?

88

Quero ter um pequeno QFormLayoutque cresça para preencher seu widget pai.

Criei um novo arquivo .ui usando o QWidgetmodelo no Qt Designer. Eu coloquei QFormLayoutdentro dessa 'janela', então coloquei alguns controles dentro dela QFormLayout.

Tudo isso funciona razoavelmente bem, mas QFormLayoutsempre permanece no tamanho que defini no Qt Designer. Eu gostaria QFormLayoutde preencher seu widget pai e aumentar / diminuir com ele.

Como posso fazer isso?

bastibe
fonte

Respostas:

129

No Designer, ative o centralWidget e atribua um layout, por exemplo, layout horizontal ou vertical. Então, seu QFormLayout será redimensionado automaticamente.

Imagem do Designer

Certifique-se sempre de que todos os widgets têm um layout! Caso contrário, o redimensionamento automático será interrompido com esse widget!

Veja também

Os controles insistem em ser muito grandes e não redimensionam no QtDesigner

Jens
fonte
13
O QtDesigner pode ser um pouco confuso às vezes.
bastibe de
29
oh, OBRIGADO por isso! :-) estive olhando para o QtDesigner (bem, QtCreator, a mesma coisa lá) por meia hora e não consegui descobrir por que meu widget central não redimensiona ao máximo - até que percebi que o pequeno ícone você circulou em sua resposta tem uma marca vermelha 'desativado' sobre ele. um clique no botão 'lay out verticaltically' na barra de ferramentas do criador e o problema é corrigido. Pela primeira vez, noto que a barra de ferramentas BTW, fácil de ignorar ...
ssc
7
Para comentar a resposta de Jens: No mac, clique no widget de nível superior (não necessariamente denominado "centralWidget") e, em seguida, clique em "Form" na barra de menu e selecione um dos layouts.
hnasarat
2
Se alguém ainda está se perguntando, isso é feito no Windows em QT5.8 / QT Creator 4.2.1 clicando no nível superior "centralWidget" (que tem uma pequena marca vermelha) e indo para Ferramentas> Editor de Formulários> Layout Verticalmente (ou horizontalmente).
LeoR
41

Descobri que era impossível atribuir um layout à inquietação central antes de adicionar pelo menos uma criança abaixo dela. Então, eu poderia destacar o pequeno ícone com a marca vermelha 'desativado' e clicar em um layout na barra de ferramentas do Designer no topo.

Jillian Beuschel Marohnic
fonte
4
Isso é enlouquecedor. Atribuir um layout ao widget central deve ser a operação mais trivial no Qt Creator. Em vez disso, isso requer combinar esta solução altamente intuitiva com Jens ' solução igualmente intuitiva ( nessa ordem exata ). Embora a automação fornecida pelo Qt Creator ainda supere o clichê repetitivo por uma ampla margem, hackear sua terrível experiência do usuário (UX) me deu um novo estremecimento.
Cecil Curry
@Cecil Curry mesmo depois dessa solução, demorei 20 minutos para perceber o que deveria ... porque centralWidget apenas no caso de não haver opção de menu de contexto para adicionar layout ... apenas um botão micriscópico na barra de ferramentas que parece quase inativo
Swift - Friday Pie
3
Escrevendo este comentário pois mesmo depois das soluções aqui, tive dificuldade em encontrar a opção. Você deve selecionar o centralWidget, clicar com o botão direito em algum espaço livre do seu aplicativo, ir para 'Layout' no menu de contexto que se abriu e selecionar o layout desejado. Isso funcionou para mim, pelo menos (QT5, usando QT Designer 5.11.1).
kushy
10

A resposta aceita (sua imagem) está errada, pelo menos agora em QT5. Em vez disso, você deve atribuir um layout ao objeto / widget raiz (apontando para a imagem mencionada, deve ser o em MainWindowvez de centralWidget). Observe também que você deve ter pelo menos um QObjectcriado abaixo dele para que isso funcione. Faça isso e sua interface do usuário responderá ao redimensionamento da janela.

Nikos
fonte
0

Você precisa alterar o tipo de layout padrão do objeto QWidget de nível superior do tipo de layout Break para outros tipos de layout (Layout vertical, Layout horizontal, Layout de grade, Layout de formulário). Por exemplo: insira a descrição da imagem aqui

Para algo assim:

insira a descrição da imagem aqui

Linh Dao
fonte