Eu não evitaria usar o Qt apenas por esses motivos. Você não é obrigado a usar todas as classes de utilitários do Qt; para aqueles que substituem o STL, você será forçado a usar o QString e, possivelmente, o QStringList. Além disso, geralmente há muito mais em um programa do que a GUI. Você sempre pode usar C ++ exclusivamente genérico para o restante do seu programa e usar o Qt apenas para a GUI.
Na minha opinião, trabalhar com STL tem mais a ver com entender quais estruturas de dados subjacentes são usadas e suas complexidades e, consequentemente, em quais momentos você deve usar cada contêiner. E quando se trata de programação C ++, trata-se especialmente de saber como usar o cabeçalho <algorítmo> muito essencial, que também deve funcionar nos contêineres do Qt, já que eles são compatíveis com STL.
Não vejo muito mal em usar todas essas extensões que o Qt fornece, desde que você saiba (ou tenha pelo menos uma idéia geral) de como elas são implementadas internamente. Verifique se coisas como Q_OBJECT, SIGNAL (), SLOT (), foreach () não são mágicas, mas macros que se expandem para instruções C ++ válidas. Por exemplo, não é tão complicado entender como as classes compartilhadas implicitamente e os relacionamentos pai-filho que fazem o Qt parecer mais com o Java são implementados. Você sempre pode tentar recriar algumas funcionalidades em um projeto separado, apenas para ver se você pode fazê-lo com C ++ genérico e não se sentir mal por usá-las no Qt.
Além disso, dê uma olhada nas bibliotecas do Boost. Eles fornecem utilitários extras que a biblioteca C ++ padrão não oferece, e são realmente uma boa maneira de se aproximar um pouco do C ++ genérico, pois seguem essencialmente as mesmas convenções que o C ++ genérico. Algumas das bibliotecas têm classes de modelo bastante complexas, e simplesmente tentar entender como elas funcionam é, por si só, um bom estudo em C ++. O Boost possui muitos utilitários que não podem ser encontrados no Qt e outros que implementam conceitos iguais ou semelhantes às de algumas classes do Qt e podem ser usados em seu lugar.
Se você chegar ao mercado de trabalho trabalhando com C ++, é provável que trabalhe com o Qt ou outra estrutura que, da mesma forma, tenha suas próprias classes de utilitários que tentam simplificar o C ++.
Concordo com a maioria dos elogios ao Qt, mas a pergunta era: Qual é a melhor estrutura de GUI a ser usada que permite / requer o maior uso de C ++ genérico e do STL? A esse respeito, o Qt é um pouco esquizofrênico: duplica contêineres e algoritmos STL com suas próprias reviravoltas. Ele também fornece contêineres diferentes do STL. A interoperabilidade entre Qt e STL nem sempre é fácil. Em alguns casos, leva algumas chamadas de função para começar a partir
std::string
deQString
e para trás.O wxWidgets tem uma opção para compilação STL, que usa contêineres STL exclusivamente - não há universo paralelo com substituições criadas em casa, como no caso do Qt. Ele também compila com um compilador C ++ padrão sem a necessidade de extensões não padrão. É uma estrutura GUI de qualidade que vale a pena considerar.
Você também pode dar uma olhada em gtkmm, que é um wrapper C ++ em torno do GTK +. Está mais perto de cumprir seu primeiro requisito do que o Qt.
fonte
Eu não me preocuparia muito em não usar bibliotecas STL específicas, como std :: string ou std :: iostream ou std :: vector. Os equivalentes de QT têm um sabor diferente, mas não estão muito distantes para causar qualquer problema.
A diferença mais idiomática na minha opinião parece ser o estilo de programação pesado para usar
new
na alocação. Enquanto para um programa QT, isso pode ser bom para a parte Gui, a virtude de C ++ e RAII é que você pode realmente manter muitos dados na pilha em vez da pilha. Ao mudar para escrever código não GUI, lembre-se disso.fonte
new/delete
chamadas manuais , isso não é tão fácil e propenso a erros. Nas seções críticas (manipulação de big data), isso pode fazer a diferença, especialmente asdelete
chamadas podem ser bastante lentas.