首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过GtkLabel访问GtkBuilder

通过GtkLabel访问GtkBuilder
EN

Stack Overflow用户
提问于 2015-03-09 18:32:28
回答 2查看 276关注 0票数 1

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

lottozahlen.cpp

代码语言:javascript
复制
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);
}

编译错误

代码语言:javascript
复制
/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()));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-10 08:27:07

您可能只需要包含gtkmm/label.h头文件。包括gtkmm.h应该给你所需要的一切。

票数 2
EN

Stack Overflow用户

发布于 2015-03-09 20:31:41

Rule No1.永远不会忘记在使用指针之前测试它们是否有效。

我现在不能测试我的语句,因为我不使用glade,但据我所记得的,您需要首先加载一个特定的小部件,方法是将它的名称指定为第二个参数,如下所示:

代码语言:javascript
复制
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;
}

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

代码语言:javascript
复制
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文件中引用的正确名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28949318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档