Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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++ 列出Gtk中向量的内容+_C++_Gtkmm - Fatal编程技术网

C++ 列出Gtk中向量的内容+

C++ 列出Gtk中向量的内容+,c++,gtkmm,C++,Gtkmm,我正在用Gtk+进行一些练习。我一直在创建一个带有工作菜单的窗口。 我可以基本上创建测试对象,一个正方形,要求用户输入边长并将其存储在向量中,但我不能列出它们 我想要的是显示一个滚动窗口,列出所有存储的对象,如: _Square 1-side:7_ _Square 2-side:25_ 到目前为止,我可以显示带有文本标签的滚动窗口,但没有任何关于存储对象的信息。 以下是我尝试过的代码: Gtk::Dialog dialog("Listing Squares",false,true);

我正在用Gtk+进行一些练习。我一直在创建一个带有工作菜单的窗口。 我可以基本上创建测试对象,一个正方形,要求用户输入边长并将其存储在向量中,但我不能列出它们

我想要的是显示一个滚动窗口,列出所有存储的对象,如:

_Square 1-side:7_  
_Square 2-side:25_  
到目前为止,我可以显示带有文本标签的滚动窗口,但没有任何关于存储对象的信息。 以下是我尝试过的代码:

Gtk::Dialog dialog("Listing Squares",false,true);
dialog.set_default_size(500,30);
Gtk::Button close("Close");
close.signal_clicked().connect( sigc::mem_fun(*this,&Window::onFileListButtonClose) );
Gtk::VBox* vbox = dialog.get_vbox();

Gtk::ScrolledWindow sw;
sw.set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC);

/** FETCH FROM ARRAY*/
  for(unsigned int i(0); i<vc.size();++i){
    Gtk::Label label( "Square number " + i );
    sw.add( label );
  }
sw.show_all_children();
vbox->pack_start( sw );
vbox = 0;
dialog.add_action_widget(close,1);
dialog.show_all_children();
dialog.run();
任何帮助都将不胜感激

PS:在尝试列出方块之前,我创建了一些方块

根据,add member函数通过引用接受小部件。这意味着您在此处传递的对象必须在引用它们的容器的整个生命周期内存在。在for循环中,只要循环进行一次迭代,它们就不再存在。如果在循环之前创建标签,则它们在函数末尾不再存在。您遇到了与此等效的:

现在,这是一个在黑暗中的一点点射击,因为我不知道Gtk,我不知道这个小部件是否被复制到其他地方,所以原件可能被破坏,但它看起来是我从纯粹的C++观点上面描述的方式。


为了确保这是罪魁祸首,请在应用程序中全局定义所有标签,并查看它们是否出现。如果他们这样做了,你就会知道你需要以一种标签处于活动状态的方式来声明标签,例如在函数/循环结束后在堆上声明标签,并且仍然可以适当地销毁标签。

你应该提供定义和填充vc的代码。如果它是空的呢?我会用这个代码更新帖子!在for循环中,只需添加一个包含文本平方数的标签。你看到那段文字了吗?您是否只需要在该循环中添加其他代码来添加来自Cuadrado对象的信息?你真的能访问这些对象的内容吗?嗨,标签的方块号没有显示。这就是为什么我在这里征求意见,一旦我能看到它,我将实际显示对象信息。是的,我可以访问Cuadrado对象,但我只能通过标准输出它们的信息。如果一个cout Hi!我解决了这个问题。我按照您的建议在堆中声明了标签,并将它们存储在一个表中。谢谢你,伊菲!
void Window::onMenuFileNew(void) { 
  Gtk::Dialog dialog("New Square",true,true);
  dialog.set_default_size(70,20);
  dialog.set_has_separator(true);
  Gtk::Button close("Close");

  entry.set_max_length(2);
  entry.set_text("");
  close.signal_clicked().connect( sigc::mem_fun(*this,&Window::onFileNewButtonClose) );
  Gtk::Label lab("Square side length:");
  Gtk::VBox* vbox = dialog.get_vbox();
  vbox->pack_start( lab );
  vbox->pack_start( entry );
  vbox = 0;
  dialog.add_action_widget(close,1);
  dialog.show_all_children();
  dialog.run();
}

void Window::onFileNewButtonClose(void) {
  int side = atoi( (entry.get_text()).c_str() );
  vc.push_back(Cuadrado( side ));
}