Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's C++ page.

 

 

 

 

 

(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)

 

IDE(s):

Project type:

Compiler(s):

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.

 

 

 

 

 

Go back to Richel Bilderbeek's C++ page.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict