【问题标题】:Display the value of an entry显示条目的值
【发布时间】:2016-12-05 17:20:00
【问题描述】:

我在 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;
}

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

【问题讨论】:

    标签: c++ c++11 c++14 gtkmm gtkmm3


    【解决方案1】:

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

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

    bouton->signal_clicked().connect(
      [param]() {
        std::cout << param->get_text() << std::endl;
      }
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 2013-08-29
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多