通过 GtkBuilder 访问 GtkLabel
Access to GtkLabel by the GtkBuilder
如何访问标签元素 (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()));
第 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
文件中引用的正确名称
大概您只需要包含 gtkmm/label.h header。包括 gtkmm.h 应该给你你需要的一切。
如何访问标签元素 (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()));
第 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
文件中引用的正确名称
大概您只需要包含 gtkmm/label.h header。包括 gtkmm.h 应该给你你需要的一切。