Como funciona o desenvolvimento de interfaces gráficas no C++?

Bom dia a todos. Estava estudando C++ por esses dias e li que o C++ padrão não possui suporte à interface gráfica. Usa-se alguma biblioteca que interaja com o sistema de janelas do Sistema Operacional. Mas o sistema de janelas do sistema operacional é feito em que linguagem? Alguém poderia me explicar como isso tudo funciona? Eu não entendi direito. Tipo, temos o framework QT, que além de MVC e outras coisas ele também tem a parte gráfica. Mas isso são somente chamadas ao sistema de janelas?

No linux você tem dois famosos frameworks.
QT framework usado pelo pessoal do kde
GTK framework usado pelo pessoal do gnome

Pois é, mas a minha dúvida é com relação à como isso funciona. Eu Desenvolvo uma aplicação com o QT. A parte gráfica o QT chama do sistema operacional??? Eu não estou entendendo.

Você precisa ter o qt instalado no Sistema operacional.
No caso da interface KDE isso já vem nativo e nos outros so vc vai precisar instalar as libs.
Além de compilar para cada arquitetura e cada SO.

Mas no final das contas, essa interface gráfica é implementada em que linguagem? A minha dúvida mesmo é: o QT chama o sistema de janelas do windows (ou do linux, ou de outro S.O.). Mas como tal sistema é implementando? É em que linguagem? E você saberia informar o porquê de o C++ não ter suporte nativo à inteferace gráfica?

a linguagem usada no qt é c++, o gtk usa-se o c, mas exite um ‘wrapper’ para c++ chamado gtkmm

aqui há uma confusão, talvez oq vc leu, ou oq quizeram informar, é q em c e em c++ ñ são distribuidas bibliotecas nativas para widgets, mas isso é uma caracteristica da linguagem, oq ñ impede ninguem de escrever uma, até mesmo as funções básicas de entrada e saída estão em bibliotecas

flw,.t+

[quote=quikkoo]a linguagem usada no qt é c++, o gtk usa-se o c, mas exite um ‘wrapper’ para c++ chamado gtkmm

aqui há uma confusão, talvez oq vc leu, ou oq quizeram informar, é q em c e em c++ ñ são distribuidas bibliotecas nativas para widgets, mas isso é uma caracteristica da linguagem, oq ñ impede ninguem de escrever uma, até mesmo as funções básicas de entrada e saída estão em bibliotecas

flw,.t+[/quote]
Agora você chegou onde eu queria. Então quer dizer que eu posso escrever uma biblioteca em C++ para interface gráfica? O que queriam dizer é que apenas o C++ não tem uma biblioteca padrão para tal, isso? Grato a todos pela atenção.

Matheus,

Para um trabalho da faculdade desenvolvi uma aplicação simples usando QT. Se lhe interessar posso mandar o código para o seu email.

Mande seu email por MP.

Matheus,

Sim! As classes do QT utilizam a API do sistema operacional que já possui widgets, ao menos no windows. Você pode perfeitamente criar os seus widgets, porém para colocá-los na tela, você precisa interagir com a API do sistema operacional. Então, mesmo em casos como o Firefox, que renderiza a página desenhando os componentes e tal, ele tem um widget que é o componente onde a página é mostrada, que é registrada no Windows.

E isso é bom, afinal, você centraliza o código de desenho de janelas e componentes em um só lugar e permite o gerenciamento de tal para todos os aplicativos de uma só forma. Exemplo: se todos os programas usarem a API do SO para desenhar os componentes, é possível que se aplique temas que afetam todos os programas ao mesmo tempo.

Agora falando de C++: na espec da linguagem não existe uma api para criação de interfaces gráficas (GUI). Porém existem as famosas e mais utilizadas, que atualmente são o QT e o GTK+ (ambas multiplataforma). Antigamente se usava também o MFC e o da Borland (não lembro o nome), para Windows. Que eu saiba, o QT no Windows utiliza a API do SO para criar os componentes, exceto aqueles que não existem no SO, para aproveitar a parte de temas, etc. No Linux (KDE), como o QT é a base para todos os aplicativos, este renderiza os componentes, sendo que inclusive é mais integrado ao SO. É possível ver isso ao instalar o Firefox (GTK+) no KDE e tentar salvar um arquivo. Você verá que o diálogo que for aberto não terá o tema dos outros aplicativos, nem o diretório padrão e os atalhos. Isso porque no KDE é o QT que trata isso. O mesmo ocorre no Gnome com o GTK+.

Não são simples chamadas ao sistema, pois ele expõe a parte de signals e slots, que é uma forma de IPC bem bacana. Além disso, existem diversos widgets que o SO não possui, e esses são desenhados pelo QT (e registrados no Windows, no caso, como Janelas).

Agora… por que vc perguntou isso? Apenas curiosidade? :]

[[]]'s

[quote=RafaelViana]Matheus,

Para um trabalho da faculdade desenvolvi uma aplicação simples usando QT. Se lhe interessar posso mandar o código para o seu email.

Mande seu email por MP.[/quote]
Mandei pra ti agora um MP.

[quote=DanielGimenes]Matheus,

Sim! As classes do QT utilizam a API do sistema operacional que já possui widgets, ao menos no windows. Você pode perfeitamente criar os seus widgets, porém para colocá-los na tela, você precisa interagir com a API do sistema operacional. Então, mesmo em casos como o Firefox, que renderiza a página desenhando os componentes e tal, ele tem um widget que é o componente onde a página é mostrada, que é registrada no Windows.

E isso é bom, afinal, você centraliza o código de desenho de janelas e componentes em um só lugar e permite o gerenciamento de tal para todos os aplicativos de uma só forma. Exemplo: se todos os programas usarem a API do SO para desenhar os componentes, é possível que se aplique temas que afetam todos os programas ao mesmo tempo.

Agora falando de C++: na espec da linguagem não existe uma api para criação de interfaces gráficas (GUI). Porém existem as famosas e mais utilizadas, que atualmente são o QT e o GTK+ (ambas multiplataforma). Antigamente se usava também o MFC e o da Borland (não lembro o nome), para Windows. Que eu saiba, o QT no Windows utiliza a API do SO para criar os componentes, exceto aqueles que não existem no SO, para aproveitar a parte de temas, etc. No Linux (KDE), como o QT é a base para todos os aplicativos, este renderiza os componentes, sendo que inclusive é mais integrado ao SO. É possível ver isso ao instalar o Firefox (GTK+) no KDE e tentar salvar um arquivo. Você verá que o diálogo que for aberto não terá o tema dos outros aplicativos, nem o diretório padrão e os atalhos. Isso porque no KDE é o QT que trata isso. O mesmo ocorre no Gnome com o GTK+.

Não são simples chamadas ao sistema, pois ele expõe a parte de signals e slots, que é uma forma de IPC bem bacana. Além disso, existem diversos widgets que o SO não possui, e esses são desenhados pelo QT (e registrados no Windows, no caso, como Janelas).

Agora… por que vc perguntou isso? Apenas curiosidade? :]

[[]]'s[/quote]

Obrigaod pela respostoa. Eu pesquisei sobre isso através de outras fontes e só completando o que você disse. A aplicação usa um determinado framwork para desenvolver uma interface gráfica. Vamos pegar o QT como exemplo. Quando eu coloco uma janela na minha aplicação, o QT chama essa janela do sistema operacional. O sistema operacional por sua vez tem uma série de componentes implementados, como dialogs, buttons, showmessages etc. Tais componentes são escritos em C usando API’s de desenho. Esses componentes são disponibiliados pelo windows sob a forma de DLL’s (a implementação não é mostrada, mas segue esse esse esquema que eu acabei de falar).
Eu perguntei apenas por curiosidade mesmo.