【问题标题】:Access to GtkLabel by the GtkBuilder通过 GtkBuilder 访问 GtkLabel
【发布时间】:2015-03-09 18:32:28
【问题描述】:

如何访问标签元素 (GtkLabel) 以在运行时更改文本?使用此代码,我得到一个编译错误。

lottozahlen.cpp

Gtk::Window* pWindow = 0;
Gtk::Label* pLabel = 0;

int
main (int argc, char **argv)
{
  Gtk::Main kit (argc, argv);
  Glib::RefPtr<Gtk::Builder> refBuilder = Gtk::Builder::create_from_file ("ui/main.glade");

  refBuilder->get_widget ("mainWindow", pWindow);
  refBuilder->get_widget ("label_1", pLabel);

  kit.run (*pWindow);

  return (0);
}

编译器错误

/usr/include/gtkmm-3.0/gtkmm/builder.h:628:93: error: incomplete type ‘Gtk::Label’ used in nested name specifier
 widget = dynamic_cast<T_Widget*>(this->get_widget_checked(name, T_Widget::get_base_type()));

【问题讨论】:

    标签: c++ gtkmm glade


    【解决方案1】:

    大概你只需要包含 gtkmm/label.h 标题。包括 gtkmm.h 应该会为您提供所需的一切。

    【讨论】:

      【解决方案2】:

      第 1 条规则。永远不要忘记在使用指针之前测试它们是否有效

      我现在无法测试我的陈述,因为我不使用 glade,但据我所知,您需要先加载特定的小部件,方法是将其名称指定为第二个参数,如下所示:

      try // never assume the file exist, it may be removed
      {
           Glib::RefPtr<Gtk::Builder> refBuilder =
                  Gtk::Builder::create_from_file ("ui/main.glade", "label_1"); // we want label!!
      }
      catch ( Glib::Error& ex )
      {
             std::cout << ex.what() << std::endl;
      }
      

      现在一旦标签被加载,我们会得到一个指向标签的指针,如下所示:

      Gtk::Label* pLabel = 0;
      refBuilder->get_widget ("label_1", pLabel); // OK now we have label
      
      if ( pLabel ) // this is the only way to test if pointer is valid
      {
            // use pLabel
      }
      else // label load failed
      {
            // handle error
            std::cerr << "label load failed\n" << std::endl;
      }
      

      您还必须确保"label_1"*.glade 文件中引用的正确名称

      【讨论】:

      • 你写的一切都是正确的。但这都不是我的问题。对不起。
      • 我上面代码的要点是,您应该能够通过检查指针并使用 try catch 来查看问题的根源来调试问题的根源。只运行代码而不进行调试不会有太大帮助。您需要首先确保林间空地文件具有“label_1”,并检查文件是否已加载等等......试试看自己......如果可能的话发布你的输出。
      • 提问者是编译问题,不是运行时问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 2017-01-06
      • 2021-07-31
      • 2013-02-09
      • 2013-06-13
      • 2018-01-15
      • 2022-01-23
      相关资源
      最近更新 更多