Duvida Básica/Amadora!! - Qt Designer / .ui



  • Pessoal, estou tendo um probleminha básico devido a minha carência na área de programação e finalmente achei este mini fórum. Espero que vocês poção me ajudar =D

    Eu estou com um projeto em QT com 3 .ui contando com minha Main.ui e gostaria de saber como eu faço para usa uma label por exemplo da A.ui na B.ui.

    Explicando melhor: Como faço para usar um botão na B.ui com um @ui->labelTexto->setText("Texto");@ se esta labelTexto estiver no A.ui

    Sei que é bem simples mas eu não sei COMO pesquisar sobre=/
    Grato



  • Olá juliofmendes!

    Dê uma olhada "nesse exemplo":http://doc.qt.nokia.com/stable/designer-calculatorform.html de utilização de .ui's. Se quiser pesquisar mais a respeito, procure por "Qt Designer" na documentação. "Esta página":http://doc.qt.nokia.com/stable/designer-manual.html#qt-designer parece ser um bom ponto de partida :-)

    PS: Editei o título da thread apenas para refletir o assunto tratado, ok?



  • Sem bronca, pode edita-lo ^^

    Vou dar uma lida agora, mas eu esqueci de falar uma coisa. Eu tinha visto "este video":http://www.youtube.com/watch?v=wUH_gu2HdQE e feito como no segundo exemplo dele (no fim), porem, eu estou abrindo minha A.ui no Main.ui ... criando um Objeto e dando o comando exec();

    Oque eu realmente estou com dificuldade, é de utilizar uma variável (label) dele em outro local quando ele já está rodando(No Objeto criado).

    [Editado] A maioria eu já tinha lido e não fala exatamente oque preciso =/



  • Tem como você colocar alguns trechos do seu código? Fica mais fácil acharmos o que você precisa :-)



  • Vamos lá:

    Tenho um Projeto.H com :

    @#include "ProjetoP.h"@

    @public:
    explicit Projeto(QWidget *parent = 0);
    ~Projeto();
    ProjetoP *pnl;@

    Um Projeto.cpp com:

    @Projeto::Projeto(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Projeto)
    {
    ui->setupUi(this);
    pnl = new ProjetoP(this);
    }@
    e um

    @void Projeto::on_actionPainel_triggered()
    {
    pnl->show();
    }@

    Até aqui, quando eu executo o programa e clico no botão que chama on_actionPainel_triggered(), ele abre uma UI com nome de ProjetoP.ui

    porem em outra UI (ProjetoC.ui) eu gostaria de comandar este objeto já iniciado (Aberto pelo on_actionPainel_triggered() )... gostaria de poder alterar por exemplo uma label que esteja em ProjetoP.ui com uma SpinBox do ProjetoC.ui

    @// se eu tiver complicado no codigo ou houver uma forma de fazer isso mais fácil, pode falar.@

    Abrigado pela atenção =)



  • Coloca o código de como você tentou fazer.

    A princípio o problema parece ser o fato de vc tentar acessar um widget de projetoP através do ui que, se foi inserido em sua classe pelo QtCreator, deve estar como private. Nesse caso vc precisaria adicionar algum método para tornar público o acesso a esse widget. Mas isso, claro, supondo que entendi o que vc tentou fazer. Com o código fica mais claro ;)



  • Tudo que eu quero fazer é controlar uma UI através de outra, sem usar a principal.

    Projeto: http://www.megaupload.com/?d=LXDEISQS
    espero que possa mesmo me ajudar =/

    desculpe me a confusão.



  • Não precisa pedir desculpas :-)

    Baixei o código. Assim que eu tiver um tempo aqui eu dou uma olhada (tá tenso aqui no trabalho eheh).



  • Sei como é auhauhauhauhauhaaua
    vai dormi então e amanha tu da sinal de vida ^^



  • Tá, deixa eu entender, vc usa Windows, certo?

    Pq ao tentar compilar aqui no Linux, retornou vários erros nos includes, pois o código fazia referência a, por exemplo, ui_focuss.h mas o nome arquivo gerado era ui_FocusS.h (pois foi gerado automaticamente à partir de FocusS.ui).

    Em Linux há a diferenciação entre minúsculas e maiúsculas em nomes de arquivo (se não me engano no OS X também). Como Qt é uma ferramenta para desenvolvimento cross-platatform, seria bom vc alterar o código para usar os nomes corretos, pois seguiria funcionando no Windows e não quebraria a compilação nos outros sistemas, caso um dia venha a precisar gerar versões para eles.

    Segue um diff dessas correções: http://anselmolsm.org/public/qt/devnet/9911.diff

    Bom, por enquanto foi o que consegui olhar aqui, assim que rolar um tempo eu vejo o seu problema exatamente. Só pra ver se entendi, vc quer atualizar o "Painel" conforme editar os spinboxes da janela "comando", certo?

    até+



  • Não sei qual sua experiência com desenvolvimento, por favor, não entenda isso como crítica e sim sugestão de melhoria. Assumo que estamos todos aqui no intuito de compartilhar conhecimento E principalmente aprender sobre Qt e outras coisas.

    Creio que ajudaria, tanto no desenvolvimento quanto na futura manutenção desse projeto, escolher nomes mais claros para as classes, pois atualmente todas as classes são chamadas focus+uma_letra_que_deve_representar_alguma_coisa.

    Por que não chamar uma classe de Painel, outra de Comando, por exemplo? ;)



  • Seguindo, uma verificação: A idéia é que a janela do painel fique em um monitor e a janela de comando fique em outro, ambos conectados a um mesmo computador, certo? Temo que o plano seja outro, pois isso envolveria um tanto de mudanças...

    Dei uma mexida rápida pras coisas funcionarem e você ter uma idéia do que precisa ser feito. A forma como está implementado não é a melhor solução possível, para isso precisaria alterar mais, mas já serve como exemplo e/ou ponto de partida para melhorias futuras. Curiosamente eu cheguei a fazer uma tela parecida com essa do Painel enquanto estava numa sala de espera dum consultório, mas eu a fiz em QML... quem sabe eu não encontro esse código e tento fazê-la funcionar de verdade? :-)

    Subi o código para http://anselmolsm.org/public/qt/devnet/focusui.zip - Se você quiser que eu remova esse arquivo do servidor, é só me avisar assim que fizer o download.

    Não entendi O método on_actionTESTE_activated() está gerando um aviso em tempo de execução. Não mexi nele pois não entendi se é um teste que você está fazendo em paralelo. Essa deixei pra vc dar uma olhada ;)

    Infelizmente são muitos arquivos para colocarmos aqui no fórum, alguns pontos dele poderiam servir para consulta futura :-( . Num próximo post eu tentarei explicar quais os pontos importantes para ficar registrado aqui.



  • [Post 1] O meu QT que tem esta mania de criar alguns com letra Maiúsculas e em outros com letra Minusculas =/

    A ideia é esta mesma que vocês entendeu.
    PS: Como uso o arquivo .diff no programa ?

    [Post 2] Eu não tenho experiencia, comecei a tentar mexer em QT/Programação este mês e basicamente fiz oque vi em Tutos e oque eu entendi lendo os manuais.

    De qualquer forma, obrigado pela dica.

    [Post 3] Exatamente isso.
    Seria interessante ver o seu com QML , até mesmo para eu já ir estudando como se usa.

    O on_actionTESTE_activated() era só um método que eu estava usando para teste, pode ser removido sem nenhum problema (Farei isso) ^^

    Vou dar uma olhada no código agora e a noite passo aqui =D

    Abraço



  • Nossa, me ajudou muito isso que você fez =O
    estou começando a implementar o resto e arrumar o codigo.

    Me tira duas duvida só.... o QT tem alguma função que faça o texto da label deslizar ?
    e depois que eu tiver feio o projeto, como eu faço pra poder gerar o programa mesmo? uma vez eu cliquei no exe do debug e fui pegando os dll que ele pedia, mas agora n funcionou ^^



  • Opa,

    Até onde sei não tem esse label deslizante pronto, mas dá pra fazer sem muito esforço. Existe uma implementação desse widget nesse exemplo do livro
    "C++ GUI Programming with Qt4":http://www.informit.com/articles/article.aspx?p=1405544 , classe Ticker.

    Para criar o pacote da aplicação, você precisa copiar as dlls do Qt necessárias para rodar sua aplicação para o mesmo diretório do executável. Curiosamente só sei como fazer isso automaticamente usando cmake, com qmake (o que você deve estar usando) preciso dar uma procurada hehe. Em todo caso, dê uma olhada em "nessa parte da documentação":http://doc.qt.nokia.com/latest/deployment-windows.html#linking-the-application-to-qt-as-a-shared-library

    PS: <modo_chato=on> É Qt, não QT </modo_chato=off> =P
    PS2: Se tiver mais perguntas, mas não relacionadas com a dúvida que iniciou esse tópico, seria legal criar um novo para não misturarmos assuntos, o que dificultaria a consulta dos habitantes do futuro.



  • anselmolsm, desculpa eu não ter te dado um feedback ainda, estou com um tempo meio curto e as provas tão me matando.

    Em breve eu comento como ele esta indo para que o tópico fique com conteúdo. Abraço


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.