在我們的項目中,我們使用的是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