Pergunta

Vou passar estas férias aprendendo a escrever aplicações Qt. Eu estava lendo sobre Qt Designer apenas algumas horas atrás, o que me fez pensar: o que as pessoas escrevem aplicações do mundo real em uso Qt para projetar suas GUIs? Na verdade, como é que as pessoas projetar GUIs em geral?

Eu, por exemplo, descobriu que escrever o código à mão foi conceitualmente mais simples do que usar o Qt Designer, embora para o complexo Designer GUIs pode fazer sentido. Grandes GUIs pode ser possível utilizando Designer, mas com o tempo eles podem se tornar muito difícil de gerir como a complexidade aumenta (isto é apenas a minha opinião). Eu também baixou o código fonte AmaroK para dar uma olhada no que esses caras estavam fazendo, e encontrou muitas chamadas para addWidget () e amigos, mas nenhum desses arquivos XML criado pelo designer (além: AmaroK tem que ser o meu aplicativo favorito sempre em qualquer plataforma).

O que, então, é o caminho "certo" para criar uma GUI? Designer ou código? Vamos, para essa discussão, considere os seguintes tipos de GUIs:

  1. diálogos simples que só precisa dar entrada, mostrar algum resultado e sair. Vamos supor que um aplicativo que leva um URL do YouTube e faz o download do vídeo para o disco rígido do usuário. O tipo de aplicações um novato é provável que começar com.
  2. Intermediário GUIs nível, como, por exemplo, um editor de notas auto-adesivas com alguns itens barra de ferramentas / menu. Vamos tomar xPad por exemplo ( http://getxpad.com/ ). Eu diria que a maioria das aplicações caindo na categoria de "utilities".
  3. GUIs muito complexo, como o Amarok ou OpenOffice. Você sabe 'em quando você vê-los, porque eles fazem seus olhos sangrar.
Foi útil?

Solução

A nossa experiência com Designer começou em Qt3.

Qt3

Nesse ponto, Designer foi útil principalmente para gerar o código que você teria, então compilar em sua aplicação. Começamos a usar para essa finalidade, mas com todo o código gerado, uma vez que você editá-lo, você não pode mais voltar atrás e regenerá-lo sem perder suas edições. Nós acabamos tendo apenas o código gerado e fazer tudo à mão a partir de agora.

Qt4

Qt4 melhorou em Designer significativamente. Já não faz isso só gerar o código, mas você pode carregar dinamicamente em seus arquivos Designer (em xml) e dinamicamente conectá-los aos objetos em execução no seu programa - código não gerada no entanto, você tem que citar os itens em Designer e ficar com os nomes para não quebrar seu código

.

A minha avaliação é que é longe de ser tão útil como Interface Builder no Mac OS X, mas neste momento, eu podia ver usando os arquivos Designer diretamente em um programa.

Nós não voltou para Designer desde Qt3, mas ainda usá-lo para protótipo, e layouts de depuração.

Para os seus problemas:

  1. Você provavelmente poderia fugir com o uso das caixas de diálogo padrão que oferece Qt. QInputDialog ou se você subclasse QDialog, certifique-se de uso QButtonDialogBox para se certificar de seus botões têm a plataforma de layout adequado.

  2. Você provavelmente poderia fazer algo mais limitado como xPad com funcionalidade Designer limitado.

  3. Eu não acho que você poderia escrever algo como OpenOffice unicamente com Designer mas talvez isso não é o ponto.

Eu usaria Designer como outra ferramenta, tal como o seu editor de texto. Depois de encontrar as limitações, tente uma ferramenta diferente para esse novo problema. Eu concordo totalmente com Steve S que uma das vantagens de Designer é que alguém que não é um programador pode fazer o layout.

Outras dicas

Na minha experiência com Qt Designer e outros toolkits / ui-ferramentas:

  • ferramentas UI acelerar o trabalho.
  • ferramentas
  • UI torná-lo mais fácil de ajustar o layout mais tarde.
  • ferramentas
  • UI tornar mais fácil / possível para não-programadores para trabalhar no design da interface.

Complexidade muitas vezes pode ser tratada de uma ferramenta UI por quebrar o projeto em vários arquivos de interface do usuário. Incluem grupos lógicos pequenas de componentes em cada arquivo e tratar cada grupo como um único elemento que é usado para construir a interface do usuário completa. conceito do Qt Designer de widgets promovidos pode ajudar com isso.

Eu não achei que a escala do projeto faz alguma diferença. Sua experiência pode variar.

Os arquivos criados com ferramentas de interface do usuário (eu acho que você poderia escrevê-los à mão se você realmente queria) muitas vezes pode ser carregado dinamicamente em tempo de execução (Qt e GTK + ambos fornecem esse recurso). Isso significa que você pode fazer alterações de layout e testá-los sem recompilar.

Em última análise, acho que ambos código-primas e ferramentas de interface do usuário pode ser eficaz. Provavelmente depende muito do ambiente, o / UI-toolkit, e de preferência claro pessoal. I como ferramentas de interface do usuário, porque eles me levantar e correr rápido e permitem fácil alterações mais tarde.

A organização que eu trabalho para portou sua aplicação GUI para o Qt há vários anos. Eu acho que existem vários aspectos que merecem destaque:

  • Trabalho com o Qt Designer, pelo menos naquele momento, não era uma opção realista: havia muitas características que não poderia ser feito com o Qt Designer;
  • Convenções e estrutura que tiveram que ser preservada impedido o uso de Qt Designer;
  • Uma vez que você começou sem Designer, é provavelmente difícil de voltar a ele;
  • o aspecto mais importante, porém, foi que os programadores foram muito usados ??para programar usando o vi ou emacs, em vez de usar uma GUI IDE.

A minha própria experiência, que remonta aprox. 4 anos, usando Qt3.3, é que o comportamento dinâmico em caixas de diálogo não foi possível realizar em Designer.

Só para dizer que eu escrevi e mantido GUIs complexas em Qt sem usar Qt Designer -. Não porque eu não gosto Qt Designer, mas porque eu nunca cheguei a trabalhar dessa maneira

É em parte uma questão de estilo e de onde você está vindo: quando eu comecei em Qt, eu tinha tido experiências horríveis de Dreamweaver e Frontpage e outras ferramentas HTML visuais, e muito preferido escrever código com HomeSite e recorrer ao Photoshop para problemas de layout complicado.

Há um perigo com IDEs código visual que você tenta manter dentro das ferramentas visuais, mas acabam por ter de ajustar o código, bem como -. De maneiras que não são bem compreendidos

desenvolvimento do iPhone aprendizagem, por exemplo, eu achei frustrante para bater 'mágica' material visual ( 'arrastar do círculo vazio no Inspetor de Conexões para o objeto na janela de Interface Builder ...'), que seria mais simples (para mim) para entender no código antigo simples.

Boa sorte com Qt -. É um grande conjunto de ferramentas, no entanto você usá-lo, e olha Qt Creator como sendo um grande IDE

Eu gostaria de acrescentar que uma das razões para a utilização designer gráfico foi a falta de gerenciadores de layout em Win32, por exemplo. Apenas posicionamento absoluto era possível, e fazer isso com a mão teria apenas sugou.

Uma vez que eu mudei de Delphi para Java para aplicações GUI (em 2002), eu nunca utilizado os designers mais. I como gerenciadores de layout muito mais. E sim, você obtém o código clichê, mas mover objetos em um designer de interface do usuário pode demorar tanto tempo como mudar o clichê. Além disso, eu seria preso com um IDE lenta; Isso é para o caso Java / C #, OK, enquanto que para Qt (especialmente Qt4) não se aplica. Para Qt3, eu me pergunto por que um deve editar o código gerado - não foi possível adicionar o código em outros arquivos? Por que motivo?

Sobre os casos discutidos: 1) Mão Coded GUI é provável mais rápido para escrever, pelo menos se você sabe as suas bibliotecas. Se você é um novato e você não conhecê-los, você pode economizar tempo e aprendemos menos com um designer, desde que você não precisa aprender as APIs que você usa. Mas "aprender menos" é o fator chave, assim, em ambos os casos, eu diria Mão Coded GUI.

2) barras de menu são muito chato para escrever código para. Além disso, acho que a detalhes como aceleradores e assim por diante. Ainda assim, isso depende do que você está acostumado. Depois de algum tempo, pode ser mais rápido digitar que clichê do que para ponto-e-clique em designer para corrigir todas essas propriedades, mas apenas se você pode realmente escrever como em uma máquina de escrever (como os administradores para que digitar comandos Unix é mais rápido do que usando qualquer GUI).

3) Eu estender a resposta para o caso # 2 a este. Note-se que, para plataformas Win32, pode ser possível que o uso de estilistas que geram recursos Win32 pode ser mais rápido para carregar (nenhuma idéia sobre isso).

No entanto, eu gostaria de mencionar um problema potencial com o uso de Qt Designer lá. caso mundo real: levou alguns segundos (digamos 10) para carregar um diálogo Java complexo (a janela de Preferências caixa de editor de texto de um programador) com um monte de opções. A correção correta teria sido para carregar cada uma das guias somente quando o programador queria vê-los (eu percebi que depois), adicionando um método separado para cada conjunto preferência a construir a sua GUI.

Se você projetar todas as guias e o switcher guia juntamente com um designer, você pode fazer isso tão facilmente? Eu acho que poderia haver um exemplo semelhante onde um código de GUI mão dá-lhe mais flexibilidade, e em um aplicativo tão grande, é provável que você necessidade de que, mesmo que apenas para fins de otimização.

Um dos principais benefícios do uso de designer para criar GUIs é que outros programadores podem mudar ou manter formulários e widgets facilmente, sem a necessidade de mergulhar em um código complexo.

É estranho que você está dizendo que o código escrito é mais simples do que manipular objetos em um ambiente gráfico. É um acéfalo.
O designer está lá para tornar sua vida mais fácil e, a longo prazo, ele faz o seu código mais sustentável. É mais fácil olhar no designer para ver o que os seus olhares UI gosto, em seguida, ler o código e tentar imaginar o que pode parecer.
Com atual Qt você pode fazer quase tudo de dentro do designer e as poucas coisas que você não pode fazer, você pode corrigir com muito poucas linhas de código no construtor. Tomemos por exemplo o exemplo mais simples - adicionando uma ligação de sinal-slot. Usando o designer é tão simples como um clique duplo. Sem o designer você precisa ir lookup a assinatura correta do sinal, editar o arquivo .h e, em seguida, Editar Escreva o seu código no arquivo .cpp. O designer permite-lhe estar acima desses detalhes e se concentrar no que realmente importa -. A funcionalidade do aplicativo

Eu gosto de primeiro turno para o designer para desenvolver widgets da GUI. Como mencionado em outros lugares, a sua mais rápidos. Você também obter feedback imediato para ver se ele "parece certo" e não é confuso para o usuário. O designer é uma das principais razões I escolher Qt sobre outros toolkits. Eu use o designer para fazer o one-off caixas de diálogo.

Dito isto, eu faço janela principal e todos os widgets complexos à mão. Eu acho que este é o caminho Trolltech pretendido. QFormLayout é uma classe que prestam facilmente programaticamente criar um diálogo de entrada.

A propósito, o designer em Qt 4 não é uma IDE como o que eles tinham em Qt 3. É apenas um editor para editar arquivos .ui. Eu gosto assim. O novo IDE multiplataforma vai ser chamado Qt Creator.

É um post antigo, mas eu aconselho você a olhar para Clementine - um leitor de música que (eu acho) deriva da Amarok. Eles usam Qt4 e do que eu posso ver que há um ui pasta no src pasta do projeto. Na pasta ui como se poderia esperar que eles têm todos os tipos de arquivos .ui. Se você compilar e iniciar Clementine você vai ver que o GUI é bastante complexo e muito bom.

Para mim, depende de quanto lógica é encapsulado no widget / GUI. Se é apenas sobre formas simples, eu prefiro usar QtDesigner.

Se ele contém verificações complexas ou interação, que tendem a programá-lo.

Estamos usando o Qt Designer se as necessidades a qualquer um criar uma GUI.
A coisa é criar apenas pequenos Widgets para determinadas tarefas (como você faria em uma classe-design) e, em seguida, levá-los juntos em um "pai-gui".

Desta forma, seus widgets são altamente reutilizáveis ??e poderia ser usado para Guis de uma forma modular. Você apenas tem que especificar o que sinaliza cada Widget está enviando e quais slots que eles fornecem.

Nós também estamos criando .ui-Files que do que poderia ser gerado durante o acúmulo de processo. Até agora não havia necessidade de editar esses arquivos manualmente.

Criar diferentes partes do seu UI
em diferentes arquivos .ui usando QtDesigner,
em seguida, trazê-los juntos (e adicionar complicações) no código.

Existem coisas que você não pode fazer em Qt Designer, você só pode fazer no código,
assim Qt Designer é apenas um (grande) parte do ferramenta de cadeia .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top