O problema que tenho é que a maioria dos livros que eu leio em C ++ passa quase sempre na sintaxe e no básico da linguagem, por exemplo , for
loops while
, matrizes, listas, ponteiros etc.
Mas eles nunca parecem criar algo que seja simples o suficiente para usar no aprendizado, mas prático o suficiente para você entender a filosofia e o poder do idioma.
Então me deparei com QT, que é uma biblioteca incrível!
Mas, trabalhando com as demos que eles têm, parece que agora estou no dilema inverso. Sinto-me como o filho do homem rico dirigindo um carro esportivo subsidiado pelo pai. Como se eu pudesse criar um software fantástico, mas não tenho idéia do que está acontecendo sob o capô.
Como exemplo do meu dilema, tome a tarefa de criar um navegador da web simples. No C ++ puro, eu nem sabia por onde começar, mas com a biblioteca Qt isso pode ser feito dentro de algumas linhas no código.
Não estou reclamando disso. Estou apenas me perguntando como preencher o vazio de conhecimento entre a estrutura básica da linguagem e a interface de alto nível que a estrutura Qt fornece?
fonte
Respostas:
Deseja saber como pisar no acelerador faz o carro andar mais rápido ou apenas se importa que pisar no acelerador faz o carro andar mais rápido?
Você está vendo o benefício da programação de caixas pretas, que é uma ótima maneira de projetar um sistema quando todas as caixas funcionarem. Alguém tem que fazer as caixas pretas e, se você quer ser esse cara / garota, precisa saber mais sobre o idioma do que o cara que está usando a caixa.
Existem trabalhos que são bons em cada estilo; portanto, depende de você o que você deseja programar. Na IMO, você estaria prestando um desserviço a si mesmo, se não enviasse um esforço para afastar parte da abstração que o QT está dando a você eventualmente.
fonte
O maior dano que você causará a si mesmo, se você quiser colocar dessa maneira, é que você não aprenderá a usar as estruturas de dados, iteradores, algoritmos e seqüências de dados C ++ padrão. O Qt possui bibliotecas próprias para todos esses fins, e você é forçado a usá-las, em vez de entidades C ++ padrão, porque as APIs do Qt aceitam apenas estruturas de dados próprias.
Alguém poderia argumentar que aprender a usar uma biblioteca de algoritmos depois de dominar outra é uma tarefa trivial. Antes de ir a uma entrevista em que os entrevistadores esperam que você domine C ++, lembre-se de lidar com essa trivialidade com antecedência.
fonte
Considerando que o Qt possui seu próprio meta-compilador com o qual você precisa processar seus arquivos de origem, é difícil considerar o código do Qt como "apenas C ++".
Mais importante, porém, o estilo de C ++ que o Qt usa e incentiva é algo que, para o resto de nós, foi visto pela última vez por volta de 1995.
Realmente, é uma tentativa de tornar o C ++ o mais parecido com Java possível. Ele perde ou desencoraja todas as coisas incríveis que realmente fazem o C ++ valer a pena hoje . Em vez disso, você está preso a um subconjunto que acima de tudo parece um Java inferior.
Portanto, se o objetivo é aprender C ++, eu diria que não, fique longe do Qt. Talvez dê uma olhada no Boost, se você quiser usar uma biblioteca estabelecida como ponto de partida. O impulso incorpora as práticas consideradas boas hoje .
Mas, honestamente, se você quiser aprender a linguagem C ++ , escolha um bom livro e concentre-se na linguagem .
Escrever um navegador da Web, não importa como você o faça, irá ensiná-lo sobre os navegadores da Web. Não lhe ensinará muito sobre o idioma que você está usando.
O C ++ como idioma não possui uma classe WebBrowser incorporada. Se você ler o padrão C ++, ele não diz nada sobre navegadores. Nem sequer menciona aplicativos GUI.
Isso ocorre porque essas coisas são criadas no topo, fornecidas por bibliotecas como o Qt. C ++, como qualquer linguagem de programação, é sobre lógica, sobre como expressar essa lógica. E sim, isso significa trabalhar com matrizes, ponteiros, loops e todas essas coisas.
Você seria capaz de escrever um navegador da Web usando apenas essas ferramentas internas, com tempo suficiente ? Você saberia como expressar a lógica do programa envolvida? Caso contrário, você precisará gastar mais tempo em loops e indicadores, menos chamadas
new QWebKit()
e apenas pegando carona nas bibliotecas prontas.A "filosofia e poder do idioma" está em matrizes, listas e loops, não em navegadores da web.
fonte
Talvez.
Eu precisaria ver o código que você está colocando nos seus manipuladores de eventos.
Realmente, porém, não fique obcecado com o quanto você "sabe". Todos nós usamos estruturas de janelas e ainda estamos aprendendo. Continue codificando / lendo coisas novas e você continuará aprendendo C ++. Aprender uma nova estrutura de janelas é um ótimo complemento para suas habilidades, mesmo que isso não signifique que você possa implementar uma rede neural ou uma classificação rápida em C ++.
fonte
Não se preocupe; em primeiro lugar a maioria de seu código só vai usar a estrutura, mas depois de um tempo você vai ter que estender -lo, mesmo que apenas um pouco. Então você terá que usar mais e mais C ++.
Lembre-se também de que você tem toda a fonte do Qt disponível, o IDE o levará felizmente à definição de qualquer função / método / classe que você desejar. Quanto mais fundo você for, mais C ++ verá.
Outros mencionaram sobre a diferença entre Qt C ++ e C ++ padrão. Estes caem em dois campos:
biblioteca diferente: Qt inclui todos os contêineres usuais: matrizes, listas, conjuntos, hashmaps etc. Eles se encaixam muito bem e são boas implementações, mas não são da variedade STD. Ainda assim, nas versões recentes (4.1 e posterior, eu acho), eles têm APIs 'semelhantes a STD', além da variedade antiga (e uma API semelhante a Java). No final, as opções de design (quando usar uma matriz, quando usar um hashmap) são as mesmas, portanto, mudar para STD para projetos não Qt não é tão difícil.
moc
adições de sintaxe: principalmente para manipulação de sinal, mas também algumas construções de loop mais agradáveis. Muitas pessoas acham que essa ferramenta significa que não é mais C ++; mas IMHO, eles parecem macros um pouco mais inteligentes. Um bom manuseio de sinal com pouca acoplagem é uma enorme vantagem de uma boa estrutura, e é notoriamente difícil de fazer em uma linguagem de tipo estático. No C ++ moderno, é possível com uma grande dose de modelos; mas isso estava longe do padrão quando o Qt chegou pela primeira vezmoc
. No final, se mais tarde você quiser fazer projetos que não sejam Qt, verifique primeiro se você está usando alguma estrutura e se ela possui sinais. Se sim, então a maior parte do que você está acostumado a fazer com o Qt se aplicará, portanto, não há 'mal' em aprender o Qt primeiro.fonte
moc
?foreach
é apenas uma macro .... (na verdade, um "alias" paraQ_FOREACH
definido em<Qt/qglobal.h>
). Eu não acho quemoc
está processando isso. E C ++ 11 tem afor (auto it : container)
construção!O Qt é amplamente utilizado no mundo comercial porque fornece um conjunto completo de ferramentas de plataforma cruzada e um ambiente de desenvolvimento, incluindo uma boa biblioteca de GUI.
Também suporta totalmente a internacionalização, incluindo a excelente ferramenta 'Linguista'.
Se você planeja uma carreira acadêmica, eu não me importaria com o Qt. Se, por outro lado, você gosta de C ++ e deseja aprender uma habilidade comercializável, vale a pena aprender o Qt.
E sim, Qt é C ++, e você pode misturar as bibliotecas padrão e aumentar o conteúdo do seu coração, se isso faz você se sentir melhor.
fonte
É uma má idéia aprender C ++ através do Qt. Primeiro, você precisa aprender os conceitos de linguagem, independentemente de qualquer estrutura, e é isso que os livros em c ++ ensinarão a você e eles estão certos. Basicamente, 'for e loops while, matrizes, listas, ponteiros' são o que são as linguagens de programação. Funcionalidades adicionais são fornecidas por estruturas. Depois de aprender uma linguagem de programação, você pode aprender qualquer estrutura, como Qt ou MFC, criada usando a linguagem, para que os aplicativos possam ser desenvolvidos rapidamente. Com relação ao Qt, depois de aprender c ++, é uma excelente estrutura que o torna tão produtivo quanto qualquer desenvolvedor Java ou .Net. Em breve, você poderá desenvolver aplicativos iOS e Android usando o Qt.
fonte
Bem, acho que a melhor maneira de aprender C ++ é SOMENTE usando sua própria sintaxe (C ++ padrão), para que você possa usar o material LANGUAGE e NÃO o Qt (ou quaisquer outros frameworks, bibliotecas ... etc.).
Por quê? porque, como iniciante, quando você olha para qualquer código C ++ misturado com outro código que não seja C ++ (Qt neste caso), não poderá ver o que é o que é do C ++ e o que não é, pelo contrário, será um processo mais complexo.
fonte