Название: как обратиться к элементам формы из подключаемого класса Отправлено: Firefox от Июль 15, 2011, 09:59 Здравствуйте. мне надо обращаться к элементам формы из подключаемого класса. он наследуется от QThread. форму в дизайнере создавала. если можно объясните поподробнее, чтоб даже до ежа дошло :)
Название: Re: как обратиться к элементам формы из подключаемого класса Отправлено: Пантер от Июль 15, 2011, 10:18 Из потока это нельзя. Только сигналы/слоты.
Название: Re: как обратиться к элементам формы из подключаемого класса Отправлено: Firefox от Июль 16, 2011, 01:29 ну я вот подключила класс формы к классу, потом на него указатель ввела public и через указатель обращаюсь. компилируется все нормально, но при первом же обращении к элементу формы программа падает. я так поняла что что-то с областями видимости.
Название: Re: как обратиться к элементам формы из подключаемого класса Отправлено: Etud от Июль 16, 2011, 17:41 Вот посоветовали ей, а она все равно упрямая! ;D
Читай выше еще раз. Название: Re: как обратиться к элементам формы из подключаемого класса Отправлено: Странник от Июль 17, 2011, 15:55 если немного подробнее, то нельзя напрямую обращаться к gui из другого потока. межпотоковое взаимодействие можно организовать с помощью сигналов и слотов. наследник qthread высылает сигналы, сообщая об изменении своего состояния. эти сигналы соединяются со слотами формы, в которых реализуется реакция, в режиме QueuedConnection - это позволяет слоту выполняться в потоке принимающего объекта. на эту тему много примеров, не ленитесь.
Название: Re: как обратиться к элементам формы из подключаемого класса Отправлено: Гурман от Июль 17, 2011, 19:11 а если еще точнее, то к любым элементам GUI можно напрямую обращаться только из главного потока, в котором работает QApplication
http://doc.qt.nokia.com/latest/threads-starting.html (http://doc.qt.nokia.com/latest/threads-starting.html) Цитировать In GUI applications, the main thread is also called the GUI thread because it's the only thread that is allowed to perform GUI-related operations. из остальных потоков нельзя обращаться через сигнал-слот соединения типа Qt::DirectConnection, через остальные можно Название: Re: как обратиться к элементам формы из подключаемого класса Отправлено: Igors от Июль 17, 2011, 19:32 Было бы неплохо уточнить/расшифровать что то за "обращаться". Пример
Код Это "обращаться" или как? Если да то неясно чем это некорректно: метод const, UI я никак не трогаю Название: Re: как обратиться к элементам формы из подключаемого класса Отправлено: Гурман от Июль 17, 2011, 20:41 Цитировать Было бы неплохо уточнить/расшифровать что то за "обращаться". похоже, нельзя делать ничего, что может привести к вызову paintEvent(), но глубже не копал Название: Re: как обратиться к элементам формы из подключаемого класса Отправлено: Странник от Июль 18, 2011, 09:56 Это "обращаться" или как? Если да то неясно чем это некорректно: метод const, UI я никак не трогаю без синхронизации - некошерно, с синхронизацией - неудобно. теоретически, значение свойства может измениться в GUI-потоке во время выполнения const-метода. поправьте, если ошибаюсь.Название: Re: как обратиться к элементам формы из подключаемого класса Отправлено: Пантер от Июль 18, 2011, 09:58 Константность метода еще не показатель того, что он ничего не изменяет.
Название: Re: как обратиться к элементам формы из подключаемого класса Отправлено: LisandreL от Июль 18, 2011, 10:32 UI я никак не трогаю Ну, если опустить тот момент, что edit не должен удаляться, то благодаря тому, что QString «Implicitly Shared Class» то она в вашем примере не побъётся при копировании, даже если в основном потоке в этот момент строка изменится.Но всё равно я бы не рекомендовал так делать, тем более что копирование вовсе не всех типов атомарно на всех системах. Название: Re: как обратиться к элементам формы из подключаемого класса Отправлено: Igors от Июль 18, 2011, 12:39 ...благодаря тому, что QString «Implicitly Shared Class» то она в вашем примере не побъётся при копировании, даже если в основном потоке в этот момент строка изменится. Думается что все же побьетсяЦитата: cpp QString s1("abc"); Пока s1 и s2 шерят одни данные ("abc"). Я могу изменить напр s1 из одной нитки - а s2 из другой, все Ok благодаря Implicitl Shared. Но это не спасет если одна нитка читает s1 а другая пишет тот же s1.QString s2 = s1; Название: Re: как обратиться к элементам формы из подключаемого класса Отправлено: Гурман от Июль 18, 2011, 12:50 насколько я понял, хотя опять же, подробно не разбирался - не допускается именно рисование в параллельных нитях, поскольку для скорости отрисовки они пожертвовали синхронизацией, а без нее невозможно правильно отрисовать перекрывающиеся и parent/child элементы, и дело вовсе не в доступе к строками и "побьется-не побьется", это как раз, элементарно можно было бы внутри синхронизировать
|