Wt (pronunciado "witty" ) es un framework web de código abierto centrado en widgets para el lenguaje de programación C++ . Tiene una API similar a la del framework Qt (aunque fue desarrollado con Boost y es incompatible cuando se combina con Qt), y también utiliza un árbol de widgets y un sistema de señales/slots controlado por eventos . [2]
El objetivo de diseño de Wt es aprovechar el modelo de componentes con estado utilizado en las API de aplicaciones de escritorio, aplicado al desarrollo web , en lugar del patrón de diseño MVC (modelo-vista-controlador) tradicional. Por lo tanto, en lugar de utilizar MVC a nivel de una página web , se lo aplica al nivel de componentes individuales. [3]
Si bien la biblioteca utiliza un proceso de desarrollo de software de escritorio , admite algunas funciones específicas de la web , entre las que se incluyen:
Una de las características únicas de Wt es su capa de abstracción del modelo de representación del navegador . La biblioteca utiliza Ajax para comunicarse con los navegadores compatibles con ella, mientras que utiliza HTML simple ( post-backs de formularios) para otros agentes de usuario . Mediante un método de arranque progresivo , la interfaz de usuario se representa primero como un documento HTML simple y luego, siempre que sea compatible con el navegador, se actualiza automáticamente para usar Ajax para una mayor interactividad. De esta manera, Wt es por definición:
Debido a la popularidad de C /C++ en entornos de sistemas integrados , Wt se utiliza a menudo en dichos dispositivos y (como consecuencia) se ha optimizado en gran medida para el rendimiento .
Para obtener una descripción más detallada, consulte la sección Características del sitio web oficial.
El programa "¡Hola, mundo!" en Wt:
#include <Wt/WApplication.h> #include <Wt/WBreak.h> #include <Wt/WContainerWidget.h> #include <Wt/WLineEdit.h> #include <Wt/WPushButton.h> #include <Wt/WText.h> /* * Una clase de aplicación simple de hola mundo que demuestra cómo reaccionar * a eventos, leer entradas y brindar retroalimentación. */ class HelloApplication : public Wt :: WApplication { public : HelloApplication ( const Wt :: WEnvironment & env ); privado : Wt :: WLineEdit * nameEdit_ ; Wt :: WText * saludo_ ; void saludar (); }; /* * El argumento env contiene información sobre la nueva sesión y * la solicitud inicial. Debe pasarse al constructor WApplication * por lo que normalmente también es un argumento para el constructor * de la aplicación personalizada. */ HelloApplication :: HelloApplication ( const Wt :: WEnvironment & env ) : WApplication ( env ) { setTitle ( "Hola mundo" ); // título de la aplicación root () -> addNew < Wt :: WText > ( "Su nombre, por favor ?" ); // mostrar algún texto nameEdit_ = root () -> addNew < Wt :: WLineEdit > (); // permitir la entrada de texto nameEdit_ -> setFocus (); // dar foco auto button = root () -> addNew < Wt :: WPushButton > ( "Salúdame." ); // crea un botón button -> setMargin ( 5 , Wt :: Side :: Left ); // agrega 5 píxeles de margen root () -> addNew < Wt :: WBreak > (); // insertar un salto de línea greeting_ = root () -> addNew < Wt :: WText > (); // texto vacío /* * Conectar señales con ranuras * * - Wt-way simple: especificar objeto y método */ botón -> clicado (). connect ( this , & HelloApplication :: saludo ); /* * - usando un objeto de función arbitrario, p. ej. útil para vincular * valores con std::bind() a la llamada al método resultante */ nameEdit_ -> enterPressed (). connect ( std :: bind ( & HelloApplication :: greeting , this )); /* * - usando una lambda: */ botón -> hecho clic (). connect ([ = ]() { std :: cerr << "Hola, " << nameEdit_ -> text () << " \n " ; }); } void HelloApplication :: greet () { /* * Actualiza el texto, utilizando la entrada de texto en el campo nameEdit_. */ greeting_ -> setText ( "Hola, " + nameEdit_ -> text ()); } int main ( int argc , char ** argv ) { /* * Su método principal puede configurar algunos recursos compartidos, pero luego debe * iniciar la aplicación del servidor (FastCGI o httpd) que comienza a escuchar * solicitudes y maneja todos los ciclos de vida de la aplicación. * * El último argumento de WRun especifica la función que instanciará * nuevos objetos de aplicación. Esa función se ejecuta cuando un nuevo usuario navega * a la aplicación Wt y después de que la biblioteca haya negociado el soporte del * navegador. La función debe devolver un objeto de aplicación recién instanciado. */ return Wt :: WRun ( argc , argv , []( const Wt :: WEnvironment & env ) { /* * Puede leer información del entorno para decidir si * el usuario tiene permiso para iniciar una nueva aplicación */ return std :: make_unique < HelloApplication > ( env ); }); }
Sitio web oficial