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.html

    Nã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?



  • Não tenho certeza se o QUiLoader faz a conexão slot/signal de forma automática, que seria muito prático.



  • 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.


Log in to reply