Gui para C++?

Iniciado por @XSStringManolo, 5 Junio 2019, 21:20 PM

0 Miembros y 1 Visitante están viendo este tema.

@XSStringManolo

Busco algo sencillo alto nivel para hacer guis para programas que ya tengo hechos. Con buena documentación etc.
Qt window está muy bien pero descartemos esa opción porque no me sirve por problemas de hardware e incopatibilidad con el sistema operativo windows modificado el cual estoy utilizando para desarrollar los proyectos. Los programas funcionan, pero el ide no. Por comodidad prefiero que no.

Se que SDL tiene varias bibliotecas externas para hacer guis pero las descarto. Poca documentación y todo se puede hacer directamente con Sdl. Tengo problemas con el hardware al crear renders. Y si uso renderización por software me da error de drivers. Los cuales no voy a instalar en el sistema.

Ahora ando con la api de windows que es una marabilla y seguiré con ella.

Solo quería saber si hay una opción MULTIPLATAFORMA que sea de verdad multiplataforma xD
No probe allegro ni smfl. Más alternativas? Qué aconsejais?

Y que api equivalente a windows se suele utilizar en Linux.
Algo de alto nivel? Si incluye sockets propios para web en la librería genial, si no busco alternativas.
A poder ser que esté bien documentada y no tenga que aprender a usar la biblioteca mirando el código fuente de la misma xD

Por ejemplo busqué el codigo fuente de una calculadora con botones en SDL y no debe haber 1 en toda la web xD Encontre botones en SDL y no me funciona ninguno por lo que comenté del problema de hardware y drivers del sistema. En cambio eso no pasa con la api de windows xD

La primera biblioteca que me permita hacer una calculadora con bonotes imitando una calculadora real, me la quedo xD Que me funcione en el sistema actual que es el que uso y voy a usar siempre para desarrollar.


RayR

Para GUI te recomendaría que te alejes de Allegro, SDL, SMFL. Podrán ser buenas para juegos, pero para GUI... por buenas razones, podría casi garantizar que más temprano que tarde te darán problemas. Mejor recurrir a APIs totalmente especializadas en interfaces gráficas. Habiendo descartado Qt, las únicas opciones multiplataforma que vale la pena considerar son Gtk+ (para C, pero con bindings oficiales para C++ llamados Gtkmm), y wxWidgets. Con Gtk+ yo sólo he programado un poco en Linux. En Windows nunca lo hice, pero leí que era un poco lioso hacerla funcionar. A mí no me gusta mucho, entre otras cosas, porque las aplicaciones no lucen nativas. La documentación es decente. wxWidgets (que es con lo que está programado el Code::Blocks) usa controles nativos en todas las plataformas, y tiene buena documentación, pero no tiene tantos usuarios, por lo que, si te atoras en algo, quizás no sea tan fácil encontrar ayuda. Nunca la he usado, aunque sí leí algo de su documentación. Yo me inclinaría por ella antes que por Gtk+.

Considerando que lo que llamamos comúnmente API de Windows es en realidad un conjunto enorme de APIs para distintas tareas, no hay realmente una equivalencia en Linux. Lo más cercano sería el estándar POSIX, que abarca archivos, manejo de memoria, procesos, hilos, redes, etc., pero por ejemplo, para sonido, hay que usar otras APIs independientes. Y para interfaces gráficas lo mejor es usar las APIs nativas de los Window managers (Gtk+, KdeLibs) o las multiplataforma.

Para redes, como menciono en el párrafo anterior, lo nativo son los sockets POSIX (la API equivalente de Windows, Winsock, se basa parcialmente en ellos, por lo que si aprendes una, es muy fácil pasar a la otra). Quizás no la consideraría de alto nivel, pero, al igual que Winsock, es tan sencilla que en mi opinión, lo único que justificaría usar otra cosa sería que necesitemos algo 100% multiplataforma.

@XSStringManolo

Muchísimas gracias lor la respuesta. Mirare las recomendaciones. Tampoco busco hacer cosas extremadamente complicadas. Con saber usar botones y que se ejecute el codigo dentro ya me sirve.
Busco multiplataforma más que nada para no desarrollar una version para cada sistema con una biblioteca distinta para cada una, ya que quiero hacer cosas sencillas, y sería más complejo las propias apis de cada plataforma que el codigo del programa xD. No tiene demasiado sentido que para hacer una calculadora con botones, en cada boton un número y un enter sin nada mas, tenga que realizar 5 calculadoras distintas una para windows, otra para linux, otra para android, otra para mac...
Si el proyecto es distinto puede que ni acaben haciendo exactamente lo mismo. Bastante asco.




BloodSharp

Cita de: string Manolo en  5 Junio 2019, 21:20 PMSe que SDL tiene varias bibliotecas externas para hacer guis pero las descarto. Poca documentación y todo se puede hacer directamente con Sdl. Tengo problemas con el hardware al crear renders. Y si uso renderización por software me da error de drivers. Los cuales no voy a instalar en el sistema.

Ahora ando con la api de windows que es una marabilla y seguiré con ella.

Solo quería saber si hay una opción MULTIPLATAFORMA que sea de verdad multiplataforma xD

Te iba a recomendar ImGui con WinAPI+OpenGL2 o SDL2+OpenGL2, pero viendo que no querés utilizar aceleración gráfica por problemas con el hardware no :P

Crear la aplicación con imgui es extremadamente facil y la documentación entera es literalmente el archivo de imgui_demo.cpp que provee de ejemplo de como utilizar literalmente todo:



Código (cpp) [Seleccionar]
bool bOpen=true;
ImGui_ImplWin32_Init(hWnd);
ImGui_ImplOpenGL2_Init();
while(bOpen)
{
   //verificar si hay mensajes de hwnd
   {
       //Procesar mensajes de hwnd
   }
   ImGui_ImplOpenGL2_NewFrame();
   ImGui_ImplWin32_NewFrame();
   ImGui::NewFrame();
   if(ImGui::Begin("Debug",&bOpen))
   {
       ImGui::Text("Hello, world %d", 123);
       if (ImGui::Button("Save"))
       {
           // do stuff
       }
       ImGui::InputText("string", buf, IM_ARRAYSIZE(buf));
       ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
       ImGui::End();
   }
   ImGui::Render();
   ImGui_ImplOpenGL2_RenderDrawData(ImGui::GetDrawData());
   SwapBuffers(hDC);
}



B#



@XSStringManolo

Que chulo! No se si me funcionará opengl, probaré a ver.