Wt example 2 is a Wt example to code and display a simple menu.
- Ubuntu 10.10 (maverick)
- Qt Creator 2.0.0
- 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
#include <Wt/WImage> //--------------------------------------------------------------------------- #include "beerwanterwidget.h" //--------------------------------------------------------------------------- BeerWanterWidget::BeerWanterWidget() : m_image(new Wt::WImage("Beer.png","Beer")) { this->addWidget(m_image); } //---------------------------------------------------------------------------
#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
#include <Wt/WPushButton> //--------------------------------------------------------------------------- #include "kaderlooswidget.h" //--------------------------------------------------------------------------- KaderloosWidget::KaderloosWidget() : m_button(new Wt::WPushButton) { this->addWidget(m_button); m_button->setText("KaderloosWidget"); } //---------------------------------------------------------------------------
#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
//--------------------------------------------------------------------------- #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); } //---------------------------------------------------------------------------
#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); } //---------------------------------------------------------------------------
#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
//--------------------------------------------------------------------------- #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); } //---------------------------------------------------------------------------
#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
Added the following arguments to the Run Settings:
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:
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.