рд╣рдо рдбрдмреНрд▓реНрдпреВрдЯреА рдкрд░ рдПрдХ рд╕рдорд╛рдЪрд╛рд░ рд╕рд╛рдЗрдЯ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрддрд╛рдКрдВрдЧрд╛ред рдореИрдВ рдореЙрд╕реНрдХреЛ рдПрд╡рд┐рдПрд╢рди рдЗрдВрд╕реНрдЯреАрдЯреНрдпреВрдЯ рдореЗрдВ "рдХрдВрдкреНрдпреВрдЯрд░, рд╕рд┐рд╕реНрдЯрдо, рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ" рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдкреНрд░рд╛рдкреНрдд 4 рд╕рд╛рд▓ рдХрд╛ рдЫрд╛рддреНрд░ рд╣реВрдВ, рдФрд░ рдПрдХ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рд╕реА ++ / рдХреНрдпреВрдЯреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рднреА рд╣реВрдВред рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдореИрдВ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╣рд╛рде рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рдЕрдзреНрдпрдпрди рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, C ++ Wt рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рд▓реЗрдЦ рд╣реИрдмрд░ рдкрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдФрд░ рдореИрдВрдиреЗ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдФрд░ рдХрд░реАрдм рд╕реЗ рдЬрд╛рдирдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред

рдХрд╛рд░реНрдпрд╕реНрдерд▓ рдХреА рддреИрдпрд╛рд░реА


Qt рдХреНрд░рд┐рдПрдЯрд░ рдореЗрдВ Gentoo-linux рдХреЗ рддрд╣рдд рд▓рд┐рдЦреЗ рдЧрдП рд╕рднреА рдХреЛрдбред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╣рдорд╛рд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВред рдореИрдВрдиреЗ Qt рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛ "рд╕рд░рд▓ C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдпрджреНрдпрдкрд┐ Qt рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ Wt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред


рдореИрдВрдиреЗ MyApp рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ред рдЕрдЧрд▓рд╛, MyApp.pro рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдЕрд░реНрдерд╛рддреН, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

LIBS + = -L / usr / lib -lwt -lwthttp -lwtdbo -lwtdbosqlite3 -I / usr / local / рд╢рд╛рдорд┐рд▓
LIBS + = -L / usr / рд╕реНрдерд╛рдиреАрдп / lib -lwthttp -lwt -lboost_regex -lboost_signals
LIBS + = -lboost_system -lboost_thread -lboost_filesystem -lboost_date_time -lpthread -lcrypt


рд╣рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЙрд╕ рд╕реНрдерд╛рди рд╕реЗ рднреА рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
ln -s /usr/share/Wt/resources/ ~/build-MyApp-Qt5-/

рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░реА рдкреВрд░реА рдорд╛рдиреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ ...


рдЦрд╛рд▓реА рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛:
 #include <iostream> #include <Wt/WServer> #include <Wt/WApplication> using namespace Wt; WApplication *createWidget(const WEnvironment& env) { WApplication *app=new WApplication(env); //  - app->setTitle("My Site"); //   ( ,   html <title></title>) app->setTheme(new Wt::WBootstrapTheme()); //   bootstrap return app; } int main(int argc, char **argv) { Wt::WServer server(argv[0]); //  server.setServerConfiguration(argc, argv, WTHTTP_CONFIGURATION); //  server.addEntryPoint(Wt::Application,createWidget); // " " if (server.start()) { int sig = Wt::WServer::waitForShutdown(); // ,   std::cerr << "Shutting down: (signal = " << sig << ")" << std::endl; server.stop(); } } 


рд╣рдо рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдкреЛрд░реНрдЯ 8080 рдкрд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдпрд╣ рд╕рдм рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:

./myapp --docroot . --http-address 0.0.0.0 --http-port 8080

рд╕реНрдЯрд╛рд░реНрдЯ-рдЕрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рд░реНрдЯ-рдЕрдк рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ "рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕-> рд░рди-> рдкреИрд░рд╛рдореАрдЯрд░" рдореЗрдВ рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред



рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдПрдХ рдЦрд╛рд▓реА рдкреГрд╖реНрда рдХреЗ рд╕рд╛рде рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ localhost:8080/

рдПрдХ рдореЗрдиреВ рдЬреЛрдбрд╝реЗрдВред


рдЪрд▓рд┐рдП рднрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЗрдиреВ рдмрдирд╛рдПрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ "рдкреГрд╖реНрда" рдХрд╣рд╛ред
page.h:

 #ifndef PAGE_H #define PAGE_H #include <Wt/WContainerWidget> #include <Wt/WText> #include <Wt/WString> #include <Wt/WNavigationBar> #include <Wt/WMenu> #include <Wt/WStackedWidget> class Page : public Wt::WContainerWidget { public: Page(WContainerWidget *parent = 0); private: Wt::WStackedWidget *contentsStack; Wt::WNavigationBar *NavBar; Wt::WMenu *LeftMenu; }; #endif // PAGE_H 


page.cpp:

 #include "page.h" using namespace Wt; Page::Page(WContainerWidget *parent):WContainerWidget(parent) { setStyleClass("container"); contentsStack = new Wt::WStackedWidget(); //  ""   ,     contentsStack->setStyleClass("container"); contentsStack->setPadding(48,Wt::Top); //,           "" NavBar = new WNavigationBar(this); //   NavBar->setTitle("MyApp","http://localhost:8080"); //    ,    NavBar->setResponsive(true); //       NavBar->addStyleClass("container"); // bootstrap NavBar->setPositionScheme(Wt::Fixed); //    LeftMenu=new WMenu(contentsStack,this); //  . ,    . NavBar->addMenu(LeftMenu); //     LeftMenu->addItem(WString::fromUTF8(""),new WText(WString::fromUTF8("  "))); //    "". addWidget(contentsStack); //    ,     ,    -  . } 


рдЙрд╕реА рд╕рдордп, рдЖрдкрдХреЛ main.cpp рдкрд░ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

 ... WApplication *createWidget(const WEnvironment& env) { WApplication *app=new WApplication(env); app->setTitle("My Site"); app->setTheme(new Wt::WBootstrapTheme()); new Page(app->root()); // ! return app; } ... 


рд╣рдо рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ:



рдЪрд▓рд┐рдП рдмрддрд╛рддреЗ рд╣реИрдВред рдЦрдмрд░ рдХрд╣рд╛рдВ рд╣реИ?


рдЕрдм рд╣рдо рдЙрдирдХреЗ рдкрд╛рд╕ рдкрд╣реБрдБрдЪреЗред рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдпрд╣ рд╕реАрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред
Wt рдореЗрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рд╣реИ, рдмрд▓реНрдХрд┐ рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рддреЛ рдореБрдЭреЗ рдЕрдм рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рдФрд░ рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рдереАред

рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реИ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕рдорд╛рдЪрд╛рд░ рдкрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рдХрд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛ред

news.h:

 #ifndef NEWS_H #define NEWS_H #include <Wt/WDateTime> #include <Wt/Dbo/Types> #include <Wt/Dbo/WtSqlTraits> class News { public: News(); std::string title; //  std::string text; //  std::string author; //  Wt::WDateTime created; //  template<class Action> //       void persist(Action& a) { Wt::Dbo::field(a, title, "title"); Wt::Dbo::field(a, text, "text"); Wt::Dbo::field(a, author, "aurhor"); Wt::Dbo::field(a, created, "created"); } }; DBO_EXTERN_TEMPLATES(News); #endif // NEWS_H 

news.cpp:
 #include "news.h" #include <Wt/Dbo/Impl> DBO_INSTANTIATE_TEMPLATES(News); News::News(): created(Wt::WDateTime::currentDateTime()) //   ,  ,      . {} 


"рд╣рдореНрдо, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ?" рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВред рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдореИрдВрдиреЗ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ sqlite3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ (рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдФрд░ рдХреНрдпреЛрдВрдХрд┐ Wt рдХреЗ рд▓рд┐рдП MySQL рдХрд╛ рд╕рдорд░реНрдерди рдореЗрд░реЗ рд▓рд┐рдП рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛), рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд╕рдорд░реНрдерд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдЗрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдо рдкреЗрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред

 #include "page.h" #include "news.h" #include <Wt/Dbo/backend/Sqlite3> #include <Wt/WApplication> #include <Wt/WPanel> using namespace Wt; Page::Page(WContainerWidget *parent):WContainerWidget(parent) { Wt::Dbo::backend::Sqlite3 DataBase=WApplication::instance()->appRoot() + "myapp.db"; //   Wt::Dbo::Session DBSession; //  DBSession.setConnection(DataBase); // DBSession.mapClass<News>("news"); //     news   Wt::Dbo::Transaction transaction(DBSession); //  try { DBSession.createTables(); //     ,      .     . Wt::log("info") << "Database created"; } catch (...) { Wt::log("info") << "Using existing database"; } transaction.commit();//  Wt::WTable *NewsTable=new Wt::WTable();//     NewsTable->addStyleClass("container");//    Wt::Dbo::Transaction transaction1(DBSession);//  .       ,   . Wt::Dbo::collection<Wt::Dbo::ptr<News> > a=DBSession.find<News>().orderBy("created desc");//    ,      . int j=0; for (Wt::Dbo::collection<Wt::Dbo::ptr<News> >::const_iterator i = a.begin(); i != a.end(); ++i) {//  .       ,        .   =) Wt::Dbo::ptr<News> Article = *i; Wt::WPanel *panel = new Wt::WPanel(); panel->setTitle(Article.get()->title); panel->setCentralWidget(new Wt::WText(WString::fromUTF8("<p>:")+Article.get()->author+"</p><p>"+Article.get()->text+"</p>")); NewsTable->elementAt(j,0)->addWidget(panel); j++; } transaction1.commit();// . ,    . setStyleClass("container"); contentsStack = new Wt::WStackedWidget(); contentsStack->setStyleClass("container"); contentsStack->setPadding(48,Wt::Top); NavBar = new WNavigationBar(this); NavBar->setTitle("MyApp","http://cursed.redegrade.net"); NavBar->setResponsive(true); NavBar->addStyleClass("container"); NavBar->setPositionScheme(Wt::Fixed); LeftMenu=new WMenu(contentsStack,this); NavBar->addMenu(LeftMenu); LeftMenu->addItem(WString::fromUTF8(""),NewsTable); //       . this->addWidget(contentsStack); } 


рдЦреИрд░, рд╕рдорд╛рдЪрд╛рд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?


рд╣рдореНрдо, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВред рдЬрд╣рд╛рдВ рд╕реГрдЬрди рдХреЗ рдмрд┐рдирд╛ред рдЕрдм рдЙрдкрд╡рд╛рд╕ рдХрд░реЛред рдЖрдкрдХреЛ рд▓реЗрдЦ рдХреЗ рднреАрддрд░ рдлрд┐рд░ рд╕реЗ рдкреГрд╖реНрда рд╡рд░реНрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред

page.h:

 #ifndef PAGE_H #define PAGE_H #include <Wt/WContainerWidget> #include <Wt/WText> #include <Wt/WString> #include <Wt/WNavigationBar> #include <Wt/WMenu> #include <Wt/WTable> #include <Wt/WStackedWidget> #include <Wt/Dbo/Session> class Page : public Wt::WContainerWidget { public: Page(WContainerWidget *parent = 0); private: Wt::WStackedWidget *contentsStack; Wt::WNavigationBar *NavBar; Wt::WMenu *LeftMenu; Wt::WTable *CreateArticle; Wt::WLineEdit *Title; Wt::WLineEdit *Author; Wt::WTextArea *Text; Wt::WPushButton *AddNews; Wt::Dbo::Session DBSession; void AddArticle(); }; #endif // PAGE_H 


page.cpp

 #include "page.h" #include "news.h" #include <Wt/WApplication> #include <Wt/WPanel> #include <Wt/WLineEdit> #include <Wt/WTextEdit> #include <Wt/WPushButton> #include <Wt/Dbo/backend/Sqlite3> using namespace Wt; Page::Page(WContainerWidget *parent):WContainerWidget(parent) { Wt::Dbo::backend::Sqlite3 DataBase=WApplication::instance()->appRoot() + "myapp.db"; DBSession.setConnection(DataBase); DBSession.mapClass<News>("news"); Wt::Dbo::Transaction transaction(DBSession); try { DBSession.createTables(); Wt::log("info") << "Database created"; } catch (...) { Wt::log("info") << "Using existing database"; } transaction.commit(); Wt::WTable *NewsTable=new Wt::WTable(); NewsTable->addStyleClass("container"); Wt::Dbo::Transaction transaction1(DBSession); Wt::Dbo::collection<Wt::Dbo::ptr<News> > a=DBSession.find<News>().orderBy("created desc"); int j=0; for (Wt::Dbo::collection<Wt::Dbo::ptr<News> >::const_iterator i = a.begin(); i != a.end(); ++i) { Wt::Dbo::ptr<News> Article = *i; Wt::WPanel *panel = new Wt::WPanel(); panel->setTitle(WString::fromUTF8(Article.get()->title)); panel->setCentralWidget(new Wt::WText(WString::fromUTF8("<p>:")+WString::fromUTF8(Article.get()->author)+"</p><p>"+WString::fromUTF8(Article.get()->text)+"</p>"));//  .        . NewsTable->elementAt(j,0)->addWidget(panel); NewsTable->elementAt(j,0)->setLoadLaterWhenInvisible(true); j++; } transaction1.commit(); setStyleClass("container"); contentsStack = new Wt::WStackedWidget(); contentsStack->setStyleClass("container"); contentsStack->setPadding(48,Wt::Top); NavBar = new WNavigationBar(this); NavBar->setTitle("MyApp","http://localhost:8080"); NavBar->setResponsive(true); NavBar->addStyleClass("container"); NavBar->setPositionScheme(Wt::Fixed); LeftMenu=new WMenu(contentsStack,this); NavBar->addMenu(LeftMenu); LeftMenu->addItem(WString::fromUTF8(""),NewsTable); CreateArticle=new Wt::WTable(); //     Title=new Wt::WLineEdit(WString::fromUTF8(" ")); //  Author=new Wt::WLineEdit(WString::fromUTF8("")); Text=new Wt::WTextArea(WString::fromUTF8(" ")); AddNews=new Wt::WPushButton(WString::fromUTF8(" ")); CreateArticle->addStyleClass("container"); CreateArticle->elementAt(0,0)->addWidget(Title); //    CreateArticle->elementAt(1,0)->addWidget(Author); CreateArticle->elementAt(2,0)->addWidget(Text); CreateArticle->elementAt(3,0)->addWidget(AddNews); LeftMenu->addItem(WString::fromUTF8(" "),CreateArticle); //     Page::AddArticle    AddNews->clicked().connect(this,&Page::AddArticle); this->addWidget(contentsStack); } void Page::AddArticle() { Wt::Dbo::backend::Sqlite3 DataBase=WApplication::instance()->appRoot() + "myapp.db"; DBSession.setConnection(DataBase); // (   , ,     ,   ) Wt::Dbo::Transaction transaction(DBSession); //:        . News *a=new News(); //  a->title=Title->text().toUTF8(); a->author=Author->text().toUTF8(); a->text=Text->text().toUTF8(); Wt::Dbo::ptr<News> Article=DBSession.add(a); //    } 


рдкрд░рд┐рдгрд╛рдо:




PS рдпрджрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ, рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдореИрдВрдиреЗ рдЕрднреА Wt рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдореИрдВ рдХрд╣реАрдВ рдЧрд▓рдд рд╣реВрдВред рдЕрдЧрд░ рд╕рд╣реА рд╣реЛрдЧрд╛ рддреЛ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреАред
PPS рдпрджрд┐ рдЖрдк Wt рдкрд░ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ рдХрд┐ рдЖрдк рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдХреНрдпрд╛ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛!

Source: https://habr.com/ru/post/In209754/


All Articles