В нашем проекте мы используем gtkmm
, и у нас есть несколько классов, которые расширяют Gtk::Window
, чтобы отобразить наш графический интерфейс.gtkmm-Window остается пустым
теперь я узнал, что вызов производит поведение (как описано в предыдущей версии. Теперь вопрос немного изменился.)
Мы отображая одно окно, работает как шарм.
Затем у нас есть окно, которое отображает различные сообщения о состоянии. Назовем это MessageWindow
. Он имеет метод setMessage(Glib::ustring msg)
, который просто вызывает метку set_text()
.
После некоторой обработки мы снова спрячем это окно, и теперь мы показываем панель инструментов. Просто еще одно простое окно, ничего сумасшедшего.
Для всех окон применяется: Основной поток вызывает show()
в окне и создает новый поток, который вызывает Gtk::Main::run()
(без аргумента).
Так оно и должно быть, до сих пор.
Проблема начинается здесь: основная тема сейчас хочет называть MessageWindow::setMessage("any string")
. a) если я вызываю этот метод, окно сообщений реагирует полностью правильно. Но после этого окно панели инструментов отображается пустым. б) если я его не назову, окно сообщения не изменяет ярлык (что абсолютно ясно), и окно панели инструментов отображается так, как должно.
Кажется, что окна возились друг с другом.
Теперь вопрос:
Если мой графический интерфейс-нить блокирует в Gtk::Main::run()
, как я могу прямо сейчас изменить текст этикетки?
Мы используем gtkmm-2.4
(и нет, мы не можем обновить)
Любая помощь приветствуется.
Спасибо за ваш ответ. Я знал о жизни «Gtk :: Main». Эта вещь живет так долго, как это делает контроллер. Как правило, я получаю доступ только к графическому интерфейсу из одного потока. Но есть одно исключение, которое, похоже, вызывает проблему. Я изменяю свой вопрос – Atmocreations
Но обратите внимание, что поток, который создает Gtk :: Main, должен быть единственным и единственным, который создает окна и манипулирует ими. Ваш вопрос, кажется, подразумевает, что вы вызываете 'show' в одном потоке и вызываете' run' в другом. – rodrigo
есть. это то, что я делаю. казалось, работал без проблем ... как это можно было бы решить иначе? запускать все действия прямо из gui? – Atmocreations