Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GtkBuilder访问GtkLabel_C++_Gtkmm_Glade - Fatal编程技术网

C++ GtkBuilder访问GtkLabel

C++ GtkBuilder访问GtkLabel,c++,gtkmm,glade,C++,Gtkmm,Glade,如何访问标签元素(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_fro

如何访问标签元素(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);
}
Gtk::Window*pWindow=0;
Gtk::Label*pLabel=0;
int
主(内部argc,字符**argv)
{
Gtk::主套件(argc、argv);
Glib::RefPtr refBuilder=Gtk::Builder::从_文件(“ui/main.glade”)创建_;
refBuilder->get_小部件(“主窗口”,pWindow);
refBuilder->get_小部件(“标签_1”,pLabel);
套件运行(*pWindow);
返回(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()));
/usr/include/gtkmm-3.0/gtkmm/builder.h:628:93:错误:嵌套名称说明符中使用的类型“Gtk::Label”不完整
widget=dynamic_cast(此->选中get_widget(名称,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;
}
try//不要假设该文件存在,它可能会被删除
{
Glib::RefPtr refBuilder=
Gtk::Builder::从_文件(“ui/main.glade”、“label_1”)创建_;//我们想要标签!!
}
捕获(Glib::Error&ex)
{

std::cout大概您只需要包含gtkmm/label.h头。包含gtkmm.h应该会提供您所需要的一切。

您编写的所有内容都是正确的。但这都不是我的问题。抱歉。我上面代码的要点是,您应该能够通过检查指针和使用try-catch来调试问题的根源,以查看是什么完全失败。只运行代码而不进行调试不会有多大帮助。您需要首先确保glade文件具有“label_1”,并检查文件是否已加载,等等…尝试一下,然后查看您自己。如果可能,发布您的输出。提问者有编译问题,而不是运行时问题。
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;
}