0

我正在将库 Gtkmm 与 c++ 一起使用,但我在显示条目的值时遇到了问题。这是我的代码:

#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;
}

我的问题是当我点击按钮时我什么都没有,而我在条目中写了一个值。非常感谢您的帮助!

4

1 回答 1

1

问题是您a在创建按钮后获取字符串并在 lambda 函数中捕获该字符串(为空)。当您按下按钮时,不会再次查询文本,而是a打印从未更改过的字符串的值。

您可以改为捕获指向按钮本身的指针(按值!)并get_text()每次调用如下:

bouton->signal_clicked().connect(
  [param]() {
    std::cout << param->get_text() << std::endl;
  }
);
于 2016-12-05T17:40:59.847 回答