LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1033|回复: 7

求助GTK编程高手

[复制链接]
发表于 2006-11-24 00:44:34 | 显示全部楼层 |阅读模式
现在我要做LIBGLADEMM的一个小程序
想通过系统栏SYSTEM TRAY来控制程序的显示和隐藏
通过LIBGLADEMM 可以得到GTK::WINDOW这个对象
但 gtk_widget_hide_all () gtk_widget_show_all ()中的参数都是GtkWidget 而不是它的子孙类GtkWindow
我查了LIBGLADEMM REFERENCE,GtkWindow中没有函数实现窗口的隐藏和显示
请问我该怎么办?
发表于 2006-11-25 06:27:17 | 显示全部楼层
GtkWindow 就是 GtkWidget:

GtkWidget*  gtk_window_new                  (GtkWindowType type);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-25 17:16:54 | 显示全部楼层
程序大致这样
#include ...

Gtk::Window* winmain=0;

void on_button_hide_clicked()
{
gtk_widget_hide_all(GTK_WIDGET(winmain));
}

int main()
{
Glib::RefPtr<Gnome::Glade::Xml> refXml;
  try
  {
    refXml = Gnome::Glade::Xml::create("main.glade");
  }
  catch(const Gnome::Glade::XmlError& ex)
  {
    std::cerr << ex.what() << std::endl;
    return 1;
  }

refXml->get_widget("window_main", winmain);
  if(winmain)
  {          Gtk::Button* hide=0;
        refXml->get_widget("button_hide", hide);
        if(hide)
          {
             hide->signal_clicked().connect( sigc::ptr_fun(on_button_hide_clicked) );  
                  }
  }
        kit.run(*winmain);
  return 0;
}
....

编译运行点击按钮HIDE是GUI界面无反应
CONSOLE端显示
gtk_widget_hide_all: assertion `GTK_IS_WIDGET (widget)' failed


GtkWidget 是GtkWindow 的基类,可以这样使用吗?
如果不可以 那要实现这个功能应该怎么做?

在GtkWindow中,有一个函数hide(),但对于TOPLEVEL的window hide()就等于exit,我程序只有一个window 也就是toplevel的吧 不能通过这个hide()调用来隐藏吧???

请高手指教!
回复 支持 反对

使用道具 举报

发表于 2006-11-26 09:14:33 | 显示全部楼层
gtkmm的object不能在C gtk的function裏用吧:

winmain->hide_all();
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-26 14:34:38 | 显示全部楼层
Post by khc
gtkmm的object不能在C gtk的function裏用吧:

winmain->hide_all();



如果直接调用winmain->hide_all(),结果是整个程序都退出。我觉得原因是我程序只有一个window ,也就是toplevel的,在gtkmm-2.4 doc 中 对于Gdkwindow 的hide  函数 有如下说明
For toplevel windows, withdraws them, so they will no longer be known to the window manager; for all windows, unmaps them, so they won't be displayed.

那么在我的程序中调用hide就是quit的了,而我要实现的是隐藏起来,再通过GtkStatusicon调用函数把它显示出来
回复 支持 反对

使用道具 举报

发表于 2006-11-26 14:53:46 | 显示全部楼层
static void Gtk::Main::run          (          Window&            window           )            [static]

Returns from the main loop when the window is closed.

你應該用 kit.run();
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-26 19:25:11 | 显示全部楼层
Post by khc
static void Gtk::Main::run          (          Window&            window           )            [static]

Returns from the main loop when the window is closed.

你應該用 kit.run();


yup.!!! u r da man,my nigga
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-11-26 19:37:22 | 显示全部楼层
Post by khc
static void Gtk::Main::run          (          Window&            window           )            [static]

Returns from the main loop when the window is closed.

你應該用 kit.run();


it rocks
but my brain does not work on da
will you expain it???
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表