Я новичок в wt и просто начал добавлять веб-интерфейс в программу lagacy C++. Пример hello_world отлично работает.Как обновить веб-страницу после создания в wt (C++)
Однако приведенные примеры касаются создания веб-страницы, и страница может реагировать на события с веб-страницы (т. Е. Кнопку, галочку), я хочу изменить веб-страницу ПОСЛЕ начала сеанса. Похоже, что HMI реагирует на изменения данных, вместо кнопок с веб-страницы.
Это должно быть выполнимо, так как вес документ говорит: Фактическая обработка запроса и предоставление отвлекаются, с таким преимуществом, что может быть использована модель полной страницы рендеринга (простой HTML) или добавочные обновления (Ajax/WebSockets) в зависимости от конфигурации и свойств браузера.
добавить метод "UPDATETEXT" в hello_world:
class HelloApplication : public WApplication
{
public:
HelloApplication(const WEnvironment& env);
void updateText(std::string value); // I add this and rest are from helloworld
private:
WLineEdit *nameEdit_;
WText *greeting_;
void greet();
};
Вот реализация:
HelloApplication::HelloApplication(const WEnvironment& env)
: WApplication(env)
{
setTitle("Trading Platform Status"); // application title
root()->addWidget(new WText("Starting... ")); // show some text
nameEdit_ = new WLineEdit(root()); // allow text input
nameEdit_->setFocus(); // give focus
WPushButton *button
= new WPushButton("Greet me.", root()); // create a button
button->setMargin(5, Left); // add 5 pixels margin
root()->addWidget(new WBreak()); // insert a line break
greeting_ = new WText(root()); // empty text
/* Connect signals with slots - simple Wt-way*/
button->clicked().connect(this, &HelloApplication::greet);
/* using an arbitrary function object (binding values with boost::bind())*/
nameEdit_->enterPressed().connect
(boost::bind(&HelloApplication::greet, this))
}
void HelloApplication::greet() {
/*Update the text, using text input into the nameEdit_ field.*/
greeting_->setText("Hello there, " + nameEdit_->text());
}
Greet() от оригинального HelloWorld, и я добавляю метод UPDATETEXT.
void HelloApplication::updateText(std::string value)
{
/*
* Update the text, using text input into the nameEdit_ field.
*/
greeting_->setText(value);
}
WApplication *createApplication(const WEnvironment& env)
{
/*
* You could read information from the environment to decide whether
* the user has permission to start a new application
*/
return new HelloApplication(env);
}
В основном я запускаю хост в отдельной теме.
руководство указал:
Во все времена экземпляр WApplication доступен с помощью статического метода WApplication :: экземпляра(), и полезно проверять аргументы и параметры запуска (с помощью WApplication :: среды()), чтобы установить или изменить заголовок приложения (WApplication :: setTitle()), чтобы указать локаль (WApplication :: setLocale()) для рендеринга и многие другие параметры приложения. В многопоточной среде доступ к этому экземпляру реализуется с использованием локального хранилища потоков.
int main(int argc, char* argv[])
{
//start in new thread or it blocks the following work
thread website_thread(&WRun,argc, argv, &createApplication);
//balabalabala some work
((HelloApplication*)WApplication::instance())->updateText("Finished");
//balabala more work
return 0
}
UPDATETEXT терпит неудачу, потому что "это" является нулевым. Очевидно, что это не правильный способ выполнить задачу. Какие-либо предложения?
Вы должны посмотреть на некоторые примеры программ - в этом вопросе, по-видимому, много вопросов и недоразумений. Построение образцов действительно является вашим следующим шагом. –