O que devo escolher: GTK + ou Qt? [fechadas]

89

Alguém pode sugerir quais são os melhores usos para essas bibliotecas hoje? É apenas GUI ou eles têm suporte de banco de dados, XML, rede, threading, etc?

Eu estava lendo sobre eles e pensei em começar a aprender / usar um deles.

Qual é o mais comum? Qual é a diferença entre eles? Por que você escolheria um em vez do outro?

Idan
fonte
20
Originalmente, havia muita controvérsia sobre o modelo de licenciamento do Qt que era totalmente GPL ou comercial, enquanto GTK + era LGPL (então o último era mais fácil de usar em combinação com seu produto de código fechado). Mas agora o Qt também está disponível como LGPL IIRC, então essa não é mais uma razão real para escolher um ou outro.
Roalt
3
Você também pode olhar para esta questão relacionada principalmente: stackoverflow.com/questions/1801074/…
Caleb Huitt - cjhuitt
4
E novamente uma boa pergunta fechada sobre stackoverflow. Eu quero acrescentar que se você precisa de um bom widget HTML integrado, você tem que usar GTK agora (depois que QT 5.2 mudou para um conjunto de recursos reduzido drasticamente / inutilizável) ou usar QT e incorporar o Chrome CEF que está adicionando muitas coisas, complicações e 20 MB para seu aplicativo.
Lothar de

Respostas:

96

Como você parece ter como alvo principal o Linux, a escolha depende principalmente da linguagem de programação que deseja usar.

Se você codifica em C, então obviamente vá para GTK +

Se você codifica em C ++, vá para Qt, caso contrário, você precisará do Gtkmm (um wrapper C ++ sobre GTK +)

Se você codifica em Python, tanto GTK + quanto Qt têm vínculos para a linguagem: consulte PyGtk , PyQt e PySide (aquele lançado pela própria Nokia).

Se você codifica em Java, Qt não é mais uma opção viável, pois a Nokia descontinuou o Qt Jambi (as ligações Java para Qt).

Além disso, o Qt é mais sofisticado em relação à API QGraphicsScene de seu cenário , seu mecanismo de script construído sobre Javascript Core (o motor que alimenta o WebKit), sua máquina de estado e estrutura de animações e a IU declarativa .

GTK + não oferece muito, embora você possa usar Clutter junto com ele.

Se você está procurando especificamente em DB, XML (GTK + tem um analisador para um subconjunto de XML) e recursos de threading (GTK + tem GLib ), o Qt oferecerá tudo isso em QtSql , QtXml e QtConcurrent .

Em suma, eu diria que o Qt é uma escolha certa. Mas GTK + também é muito capaz.

Não tenho certeza se você receberá uma resposta muito clara para sua pergunta, o que explica por que algumas pessoas continuam preferindo o Gnome ao KDE ou vice-versa. Escolha o que funciona melhor para você.

PS: Se você planeja também direcionar o Symbian, vá para o Qt.

EDIT: Algo que também é ótimo com o Qt é QtWebView: ele traz o Chromium para o seu aplicativo Qt para exibir conteúdo da web. Outros estão incorporando conteúdo da web em seus aplicativos usando, por exemplo, Awesomium ou Berkelium.

Gregory Pakosz
fonte
Não se esqueça que o QtScript é desenvolvido por JavaScriptCore, que atualmente é o mecanismo de JavaScript mais rápido graças ao SquirrelFish Extreme.
CMircea
1
Em relação à sua edição, existe o WebKitGtk + para GTK +. A menos que um seja substancialmente mais maduro do que o outro, não acho que a existência do QtWebKit se qualifique como uma vantagem sobre o GTK +.
Matthew
Se você codifica em Ruby, procure QtRuby .
José Andias
5
gtkmmé ótimo, todo o poder do GTK +, mas usando C ++ real pela definição moderna, produzindo o código GUI mais limpo e legível que já vi ... na verdade, apenas o mais suportável , porque quando comecei a tentar aprender programação GUI, foi a limpeza gtkmmque restaurou minha vontade de viver. Felizmente, a perseverança valeu a pena e descobri que ela é extremamente poderosa e me encorajou a entrar mais no C ++ 14 do que no C ++ 03. Além disso, é bem mantido, pelo mesmo mantenedor principal por mais de uma década AFAICT. Sou apenas um fã, sem afiliação, etc.
sublinhado_d
3
Oh ... os dias Symbian ...
daka
41

Já usei GTK +, QT e wxWidgets antes. Aqui está um breve resumo:

Para o meu primeiro projeto de interface de usuário de plataforma cruzada, decidi ir para wxWidgets principalmente porque na época a licença não era tão restritiva quanto a QT (QT era GPL e apenas para Linux) e tinha interface de usuário específica de plataforma (ao contrário de GTK). O projeto funcionou bem, mas houve algumas falhas para compilar e rodar corretamente em outras plataformas - às vezes, alguns eventos foram iniciados de forma diferente e tal. Além disso, o GDI em wxWidgets era muito lento.

Em seguida, usei GTK para um projeto diferente em python. Para isso, usei as ligações python e tudo funcionou mais ou menos bem. Não gostei muito do fato de que a IU não parecia nativa no Windows e Mac e também quando você abre um aplicativo GTK +, ele sempre depura saídas de muitos avisos CRÍTICOS que parecem aceitáveis ​​para ignorar. : S

Por fim, fiz um projeto QT muito simples agora que a Nokia o adquiriu e ficou brilhante. O melhor dos três. Em primeiro lugar, se você não é um veterano que prefere VI ou Emacs, QtCreator é brilhante. Eu realmente amo VI e o usei por anos, mas prefiro muito mais QtCreator para projetos C ++ QT. Em relação à biblioteca também gostei muito da documentação e das APIs fornecidas. QT tem um conceito de slots e sinais que introduzem novas palavras-chave C ++ e um pré-processador. Basicamente, depois de ler um tutorial, você o entenderá facilmente e começará a amá-lo. Agora estou fazendo o desenvolvimento do iPhone e parece um pouco com o paradigma de IU do Cocoa / Interface Builder.

Resumo: Eu iria para QT com as mãos. A licença é muito boa e o SDK e a documentação muito bons.

rui
fonte
13
Considero positivo que os aplicativos GTK + tenham a mesma aparência em plataformas diferentes, pois isso significa que não preciso gastar semanas extras tentando descobrir como fazer minhas UIs se organizarem exatamente da maneira certa com cada kit de ferramentas nativo. Além disso - when you launch a GTK+ app it always debug outputs loads of CRITICAL warnings which seem fine to ignore. :S- não, não faz, a menos que você esteja fazendo algo errado, o que não está bem. Nunca vi um aviso crítico que não resultasse de um erro meu e não fosse extremamente fácil de corrigir usando o código correto. E eu fico sem mensagens de depuração, nem mesmo advertências
underscore_d
25

Eu nunca usei GTK, mas pela minha experiência pessoal usando Qt:

É muito mais do que uma simples GUI. É toda uma estrutura de aplicativo. Eu costumava pensar nisso como as bibliotecas Java para C ++. Ele fornece tudo o que você menciona - banco de dados, XML, rede e threading e muito mais. Ele também fornece itens como contêineres e iteradores, e contrapartes para várias bibliotecas de impulso.

O que mais me impressionou quando comecei a usar o Qt foi a documentação extremamente extensa. Você obtém um programa chamado Qt Assistant, que fornece documentação de API totalmente indexada e pesquisável em sua área de trabalho, bem como vários exemplos de código e tutoriais. Descobri que faz uma grande diferença ao pesquisar informações da API todas as vezes. Acesso muito rápido quando você precisa se lembrar de uma assinatura de método.

Não tenho certeza do que é mais comum; provavelmente é difícil medir com precisão. Eles são certamente populares. Como o Gnome é a área de trabalho padrão do Ubuntu, e o Gnome fica sobre o GTK, ele obviamente tem uso generalizado. Claro, o KDE também é muito popular. A Nokia está empurrando fortemente o Qt no espaço móvel - seu sistema operacional Maemo, usado no novo N900 por exemplo, em breve mudará para o Qt como o kit de ferramentas padrão (atualmente é GTK.) Eu acredito que o Qt também se tornará em breve o kit de ferramentas padrão para Symbian OS.

Eu não usei o Qt Creator, mas ouvi muitas coisas boas sobre ele. É um IDE C ++ com óbvia integração pesada com Qt. Ele também tem emulação vim falsa, o que é sempre bom se você gosta desse tipo de coisa!

Qt usa qmake para configuração de compilação. Achei isso muito melhor do que ter que escrever seus próprios makefiles. Não sei o que o GTK usa para construção.

Algumas coisas que achei um pouco desagradáveis ​​com o Qt no início foram o grande uso de macros de pré-processador. O sistema de sinais / slots fornece um bom mecanismo para a passagem de eventos / mensagens em seu aplicativo, mas parece um pouco mágica que pode não ser facilmente transportável para outro kit de ferramentas, se você quiser. Além disso, o moc (compilador de meta-objeto), embora eu não tenha certeza do que ele faz, também parece um pouco mágico acontecendo nos bastidores.

No geral, porém, eu recomendaria o Qt, especialmente se você estiver aprendendo. Ele tem uma documentação realmente incrível, um bom IDE e fóruns ocupados. Você será capaz de construir aplicativos C ++ muito rapidamente com ele, particularmente com o QML que vem em 4.7.

ngm
fonte
9

Provavelmente depende do que você deseja fazer. Eu recomendaria o Qt, porque é mais do que GUI, tem bons vínculos Python (assim como o Gtk), e as próprias bibliotecas GUI são (falando subjetivamente) mais agradáveis ​​que o Gtk.

Por outro lado, Gtk é mais comum no mundo linux, então você provavelmente pode obter mais ajuda na web. A razão para a disseminação do Gtk provavelmente tem mais a ver com Gnome e Ubuntu, do que méritos técnicos, mas se você quiser que seu software se misture bem com os dois, você conseguirá isso mais facilmente com Gtk.

Slartibartfast
fonte
7

O Qt, com certeza, tem banco de dados sólido, rede, suporte a threading, etc ... Ele faz muito mais do que apenas interface gráfica de plataforma cruzada (e faz a maior parte muito bem).

Eu recomendo em vez de GTK +.

ChristopheD
fonte
3

Apenas adicionando vantagens de QT a outras respostas. QT tem uma ótima documentação, seu próprio criador de IDE e GUI e aprimora C ++ com alguns novos conceitos como slots / sinais (basicamente eventos).

Não sou um desenvolvedor GTK, então não posso compará-los ao mundo GTK :(

Gregor Petrin
fonte
11
Para Gtk, também existe um criador de GUI Glade ( glade.gnome.org ).
David
3

Qt. Não é apenas orientado a objetos, é "bom" orientado a objetos. É baseado em um "subconjunto" do C ++ que não depende da obscuridade do C ++ (mas você tem permissão para continuar com eles, se gosta de masoquismo;)).

Ele tem um forte impulso agora que a Nokia o comprou (na verdade, a Nokia comprou há cerca de 2/3 anos). Vai estar em todos os dispositivos móveis Nokia E Intel (smartphones, netbooks, tablets).

É a espinha dorsal do KDE, então é muito maduro, mas é projetado de uma forma muito flexível, o que torna possível suportar HOJE todas as "coisas legais" mais recentes que um framework mais do que apenas GUI deveria ter.

Vá em frente.

Detro
fonte
5
Subconjunto? Mais como superconjunto, considerando qmake e moc.
rr-
1

Também parece que a Nokia está prestes a usar o Qt em todos os lugares, como no Maemo

jlru
fonte
1

Se você deseja que seu aplicativo seja executado em iOS, Android, Blackberry, outras plataformas móveis, Windows, Mac OSX e Linux, use Qt.

qt-project.org

Trusktr
fonte