在我们的项目中,我们使用的是gtkmm
,我们有几个类扩展Gtk::Window
以显示我们的图形界面。gtkmm-Window仍为空
我现在发现了什么调用产生的行为(在以前的版本中描述。现在的问题略有改变。)
我们显示一个窗口,就像一个魅力。
然后,我们有一个窗口显示各种状态消息。我们称之为MessageWindow
。它有一个方法setMessage(Glib::ustring msg)
,它简单地调用标签的set_text()
。
经过一些处理后,我们再次隐藏这个窗口,我们现在显示一个工具栏。只是又一个简单的窗口,没什么疯狂的。
适用于所有窗口:主窗口在窗口上调用show()
并创建一个新线程,该线程调用Gtk::Main::run()
(不带参数)。
这就是它应该如此,直到现在。
问题从这里开始:现在主线程想要调用MessageWindow::setMessage("any string")
。 a)如果我调用这个方法,消息窗口完全正确地反应。 但之后,工具栏窗口显示为空。 b)如果我不叫它,消息窗口不会改变标签(这是绝对清楚的),并且工具栏窗口显示为它应该。
看起来像窗户彼此混淆。
现在的问题:
如果我的GUI线程被阻塞Gtk::Main::run()
,我怎么能现在更改标签的文本?
我们使用gtkmm-2.4
(不,我们不能升级)
任何帮助表示赞赏。
感谢您的回复。我知道'Gtk :: Main'的生命周期。这件东西只要控制器一直存在。通常,我只从同一个线程访问GUI。但有一个例外,这似乎是造成这个问题。我正在修改我的问题 – Atmocreations 2012-01-12 15:46:27
但请注意,创建Gtk :: Main的线程应该是唯一一个创建窗口并操纵它们的线程。你的问题似乎意味着你在一个线程中调用'show'并在另一个线程中调用'run'。 – rodrigo 2012-01-12 16:30:26
是的。这就是我正在做的事情。似乎没有任何问题......但如何解决呢?从gui中运行所有的操作? – Atmocreations 2012-01-12 16:35:08