UI dinâmico vs estático
-
Quais os prós e contras de se optar por compilar ou interpretar os arquivos ui? Vi que pode-se optar por não compilar os arquivos ui. Ao invés disso é possível interpretá-los em tempo de execução.
Quais os pós e contras de ambos?
-
Eu não sabia que era possível interpretar arquivos ui dinamicamente, bacana. Você tem algum exemplo?
Como nunca usei não sei falar ao certo mas a vantagem de interpretar arquivos ui seria a facilidade em mudar a interface sem ter que recompilar o código.
Você pode facilmente criar duas ou três telas para determinada parte do programa e decidir em tempo de execução qual carregar.
Tenho quase certeza também de que a abordagem de interpretação é mais lenta.Fora isso não sei te falar mais nada.
Poderíamos montar um teste de desempenho de forma a calcular o tempo para carregamento de uma tela interpretada e compilada com o mesmo ui, o que você acha?
-
Sim, é possivel o nome do interpretador é o QUiLoader "Fonte":http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html#run-time-form-processing
"QUiLoader":http://qt-project.org/doc/qt-4.8/quiloader.htmlNão tinha pensado ainda nessa vantagem que você citou, realmente, podemos mudar um formulário em tempo de execução, bastando fazer alterações no arquivo XML.
Uma outra vantagem, básica pode-se dizer, é o fato de você ter um fonte mais enxuto, ou seja, o fonte, em parte, serão apenas as regras de negócio, persistência, objetos e classes de controle. Com isso consegue-se facilmente e de forma extrema a tão desejada separação da GUI do código estruturas de controle.
Que é mais lento isso é praxe, a questão é se é uma lentidão aceitável. Gostaria também de saber quais seriam outros pontos contra.
Que problemas futuros poderíamos ter pelo fato de não termos a UI em código fonte C++?
Será que a estrutura XML do UI é capaz de representar todas as possibilidades que podemos fazer quando temos um código C++ ?
É muito comum, mesmo após criarmos a GUI com o Qt Designer, ainda precisarmos fazer alguma codificação manual na GUI, ou seja, nos arquivos C++ que foram gerados pela compilação dos arquivos ui. A pergunta aqui é como isso seria possível se optarmos pelo modo dinâmico de geração de UI? Qt Designer tem tudo que se precisa para trabalhar com GUI? -
Pelo visto, o único contra é o desempenho. O código abaixo responde o restante das minhas perguntas
@MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
QUiLoader loader;
QFile file(":/forms/myform.ui");
file.open(QFile::ReadOnly);
QWidget *myWidget = loader.load(&file, this);
file.close();QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(myWidget); setLayout(layout);
}@
Qualquer alteração ou adição que necessite ser feita na gui pode ser feita através do objeto myWidget que é criado a partir da gui feta no designer. De posse do objeto myWidget podemos ter acesso a todos os componentes que estão na gui. Adicionar ou modificar os mesmos se necessário.