我正在使用带有c ++的库Gtkmm,但我有一个问题是显示一个条目的值。这是我的代码:
#include <gtkmm/box.h>
#include <gtkmm/button.h>
#include <gtkmm/main.h>
#include <gtkmm/window.h>
#include <gtkmm/entry.h>
#include <iostream>
int main(int argc, char* argv[]) {
Gtk::Main app(argc, argv);
Gtk::Window fenetre;
Gtk::VBox *boiteV = Gtk::manage(new Gtk::VBox(false, 10));
Gtk::Entry *param = Gtk::manage(new Gtk::Entry());
boiteV->pack_start(*param);
Gtk::Button *bouton = Gtk::manage(new Gtk::Button("Tester !"));
boiteV->pack_start(*bouton);
fenetre.add(*boiteV);
std::string a = param->get_text();
bouton->signal_clicked().connect([&a]() {std::cout << a << std::endl;});
fenetre.show_all();
Gtk::Main::run(fenetre);
return EXIT_SUCCESS;
}
我的问题是,当我点击按钮时,我没有任何东西,而我在条目中写了一个值。非常感谢你的帮助!
答案 0 :(得分:1)
问题是您在创建按钮后获取字符串a
并在lambda函数中捕获字符串(为空)。当您按下按钮时,不会再次查询文本,但会打印从未更改过的字符串a
的值。
您可以改为捕获指向按钮本身的指针(按值!)并每次都调用get_text()
:
bouton->signal_clicked().connect(
[param]() {
std::cout << param->get_text() << std::endl;
}
);