for循环中iterator不可乱删除
星期日, 八月 19th, 2007今天写iTalk,想要把空组删除掉。 //tree_store就是列表中的数据(TreeStore) //下面代码作用是扫描列表中的组,发现空组则删除。 Gtk::TreeModel::Children children = tree_store->children(); Gtk::TreeModel::iterator it_g; it_g = children.begin(); for (; it_g != children.end(); ++it_g) { Gtk::TreeModel::Children grandson = it_g->children(); if(grandson.begin()==grandson.end()) { const Glib::ustring& tmp= (*it_g)[buddyColumns.id]; std::cout<<tmp<<”为空组=======================”<<std::endl; tree_store->erase(it_g); } } 不过遇到了段错误。思前想后发现段错误的原因是因为那个删除 tree_store->erase(it_g); 执行了这句后,it_g所指向的数据已经失效,所以it_g++的话就会溢出。 把for 循环改成do while循环,用一个中间变量来得到it_g的值,并用它来删除。 do{ Gtk::TreeModel::Children grandson = it_g->children(); Gtk::TreeModel::iterator point = it_g; it_g++; if(grandson.begin()==grandson.end()) { //const Glib::ustring& tmp= (*point)[buddyColumns.id]; [...]
如何编译iTalk
星期五, 八月 10th, 2007前面我已经发过iTalk的截图了。为了让大家有更多的了解,现在发布编译的方法。声明:由于这是一个开发中的版本,会遇到很多问题,强烈建议您有强壮的心脏和心理准备来体验您将要做的事。 重要:由于测试的方便,代码里会有一个叫cyclonb…@gmail.com的帐号和密码。我们希望您不要用这个帐号登录和对这个帐号做密码更改之类的事情,这是我们用于测试用的。谢谢合作。非常感谢。 iTalk是以gloox为协议基础。所以你必须编译安装好gloox库才能正常编译iTalk,一般的系统可能已经提供了gloox库。但我强烈建议您卸载它。因为系统所提供的gloox是一般比较过时。而iTalk所使用的gloox会比较新。因为是处于开发状态,iTalk和gloox的svn版本变化会比较多。容易出现版本不兼容导致不能编译的结果,这也是我之前建议您等待我们发布整合版本而不是自己编译的原因。 1.首先从源里取出gloox库的2420版本。(这是iTalk现在使用的版本) svn co svn://svn.camaya.net/gloox/trunk gloox -r2420 然后是编译安装cd gloox./autogen.sh./configuremakesudo make install(如果还有不明白的,请参考http://camaya.net/glooxdownload) 2.然后取出iTalk的源代码。(实际上,iTalk在申请项目名的时候叫geekr,当然关于名字的问题我们以后再讨论) svn checkout *http*://geekr.googlecode.com/svn/trunk/ iTalk进入目录编译:cd iTalk./configuremakesudo make install 现在您可以通过命令行italk来启动程序了。 如果您有好的建议请发到Cyclone_QQ@googlegroups.com邮件列表来。谢谢讨论。
libglade中的Notebook控件不要有空页
星期二, 八月 7th, 2007libglade中的Notebook控件不要有空页 今天在写iTalk的时候。准备加一个显示登录状态时显示的动画这样的功能。于是在主窗口上加一个NoteBook控件。准备在登录中显示那个动画的页,登录成功则显示好友列表的页。 用glade画好Notebook控件后。程序加载后显示有一个警告: (italk:31101): Gtk-CRITICAL **: gtk_notebook_set_tab_label: assertion `GTK_IS_WIDGET (child)’ failed (http://lists.ximian.com/pipermail/glade-users/2004-August/002014.html)(查到的资料地址,解决方案)google一下才知道。这是因为我画的Notebook控件有三页,而我只用了其中两页。就是有一页为空。而libglademm处理这个空页时产生的这个警告。只需要去掉这个空页,或者在空页里随便加一个Vbox控件令它不为空就行了。这问题在Notebook页设为0时也会出现。这对于libglade也是一样。所以标题用这个。我看用C和libglade的人会比用C++和libglademm的人多吧。
« Previous Entries

