(C++) Wt example 2
February 24, 2017 · View on GitHub
(C++) Wt example 2
Wt example 2 is a Wt example to code and display a simple menu.
Downloads
Operating system(s) or programming environment(s)
Ubuntu 10.10 (maverick)
Qt Creator 2.0.0
Console application
- G++ 4.4.5
Libraries used:
Qt project file: CppWtMenu.pro
#------------------------------------------------- # # Project created by QtCreator 2010-12-14T12:41:04 # #------------------------------------------------- QT += core QT -= gui LIBS += -lwt -lwthttp QMAKE_CXXFLAGS += -DNDEBUG TARGET = CppWtMenu CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp \ menuapplication.cpp \ menuwidget.cpp \ beerwanterwidget.cpp \ kaderlooswidget.cpp HEADERS += \ menuapplication.h \ menuwidget.h \ beerwanterwidget.h \ kaderlooswidget.h
beerwanterwidget.cpp
#include <Wt/WImage> //--------------------------------------------------------------------------- #include "beerwanterwidget.h" //--------------------------------------------------------------------------- BeerWanterWidget::BeerWanterWidget() : m_image(new Wt::WImage("Beer.png","Beer")) { this->addWidget(m_image); } //---------------------------------------------------------------------------
beerwanterwidget.h
#ifndef BEERWANTERWIDGET_H #define BEERWANTERWIDGET_H //--------------------------------------------------------------------------- #include <Wt/WContainerWidget> //--------------------------------------------------------------------------- namespace Wt { struct WImage; }; //--------------------------------------------------------------------------- struct BeerWanterWidget : public Wt::WContainerWidget { BeerWanterWidget(); private: Wt::WImage * const m_image; }; //--------------------------------------------------------------------------- #endif // BEERWANTERWIDGET_H
kaderlooswidget.cpp
#include <Wt/WPushButton> //--------------------------------------------------------------------------- #include "kaderlooswidget.h" //--------------------------------------------------------------------------- KaderloosWidget::KaderloosWidget() : m_button(new Wt::WPushButton) { this->addWidget(m_button); m_button->setText("KaderloosWidget"); } //---------------------------------------------------------------------------
kaderlooswidget.h
#ifndef KADERLOOSWIDGET_H #define KADERLOOSWIDGET_H //--------------------------------------------------------------------------- #include <Wt/WContainerWidget> //--------------------------------------------------------------------------- namespace Wt { struct WPushButton; }; //--------------------------------------------------------------------------- struct KaderloosWidget : public Wt::WContainerWidget { KaderloosWidget(); private: Wt::WPushButton * const m_button; }; //--------------------------------------------------------------------------- #endif // KADERLOOSWIDGET_H
main.cpp
//--------------------------------------------------------------------------- #include <Wt/WApplication> //--------------------------------------------------------------------------- #include "menuapplication.h" //--------------------------------------------------------------------------- Wt::WApplication *createApplication( const Wt::WEnvironment& env) { return new MenuApplication(env); } //--------------------------------------------------------------------------- int main(int argc, char **argv) { return WRun(argc, argv, &createApplication); } //---------------------------------------------------------------------------
menuapplication.cpp
#include "menuapplication.h" #include "menuwidget.h" //--------------------------------------------------------------------------- MenuApplication::MenuApplication(const Wt::WEnvironment& env) : Wt::WApplication(env), m_menu(new MenuWidget) { this->setTitle(__TIME__); root()->addWidget(m_menu); } //---------------------------------------------------------------------------
menuapplication.h
#ifndef MENUAPPLICATION_H #define MENUAPPLICATION_H //--------------------------------------------------------------------------- #include <Wt/WApplication> //--------------------------------------------------------------------------- struct MenuWidget; //--------------------------------------------------------------------------- struct MenuApplication : public Wt::WApplication { MenuApplication(const Wt::WEnvironment& env); private: MenuWidget * const m_menu; }; //--------------------------------------------------------------------------- #endif // MENUAPPLICATION_H
menuwidget.cpp
//--------------------------------------------------------------------------- #include <ctime> #include <string> //--------------------------------------------------------------------------- #include <Wt/WHBoxLayout> #include <Wt/WPushButton> #include <Wt/WStackedWidget> #include <Wt/WVBoxLayout> //--------------------------------------------------------------------------- #include "beerwanterwidget.h" #include "kaderlooswidget.h" #include "menuwidget.h" //--------------------------------------------------------------------------- MenuWidget::MenuWidget() : m_button1(new Wt::WPushButton), m_button2(new Wt::WPushButton), m_layout_main(new Wt::WHBoxLayout), m_layout_menu_bar(new Wt::WVBoxLayout), m_stack(new Wt::WStackedWidget) { //Fill menu bar m_layout_menu_bar->setContentsMargins(0,0,0,0); m_layout_menu_bar->setSpacing(0); m_layout_menu_bar->addWidget(m_button1); m_layout_menu_bar->addWidget(m_button2); //Fill stack m_stack->addWidget(new BeerWanterWidget); m_stack->addWidget(new KaderloosWidget); //Fill main m_layout_main->addLayout(m_layout_menu_bar); m_layout_main->addWidget(m_stack); this->setLayout(m_layout_main); m_button1->setText("BeerWanter"); m_button2->setText("Kaderloos"); this->resize(200,Wt::WLength::Auto); m_button1->clicked().connect(this, &MenuWidget::onButton1Click); m_button2->clicked().connect(this, &MenuWidget::onButton2Click); } //--------------------------------------------------------------------------- void MenuWidget::onButton1Click() { m_stack->setCurrentIndex(0); } //--------------------------------------------------------------------------- void MenuWidget::onButton2Click() { m_stack->setCurrentIndex(1); } //---------------------------------------------------------------------------
menuwidget.h
#ifndef MENUWIDGET_H #define MENUWIDGET_H //--------------------------------------------------------------------------- #include <Wt/WContainerWidget> //--------------------------------------------------------------------------- namespace Wt { struct WHBoxLayout; struct WPushButton; struct WStackedWidget; struct WVBoxLayout; }; //--------------------------------------------------------------------------- struct MenuWidget : public Wt::WContainerWidget { MenuWidget(); private: Wt::WPushButton * const m_button1; Wt::WPushButton * const m_button2; Wt::WHBoxLayout * const m_layout_main; Wt::WVBoxLayout * const m_layout_menu_bar; Wt::WStackedWidget * const m_stack; void onButton1Click(); void onButton2Click(); }; //--------------------------------------------------------------------------- //From http://www.richelbilderbeek.nl/CppGetTime.htm const std::string GetTime(); //--------------------------------------------------------------------------- #endif // MENUWIDGET_H
Additional preparations
Added the following arguments to the Run Settings:
--docroot . --http-address 0.0.0.0 --http-port 8080
Deploying the Wt application locally
When running the program (from Qt Creator) you will see the following application output, indicating that the program works fine:
[2010-Nov-19 16:41:38.365920] 6360 - [notice] "Wt: initializing built-in httpd" [2010-Nov-19 16:41:38.366043] 6360 - [notice] "Reading Wt config file: /etc/wt/wt_config.xml (location = '/home/richel/qtsdk-2010.04/bin/Projects/Website/CppWtExample2-build-desktop/CppWtExample2')" [2010-Nov-19 16:41:38.366592] 6360 - [notice] "Started server: http://0.0.0.0:8080"
Now, start your web browser and go to the following address:
http://127.0.0.1:8080/
You will see the 'Hello Wt' dynamic website. You just deployed your Wt application locally. This is just fine for debugging. If the application is ready to be put on the web, deploy the Wt application globally.