![]() |
|
|
![]()
|
|
| solan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 23.5.2009 Репутация: нет Всего: нет |
Программа добавляет строки в течении определенного времени. После ее остановки текст в компоненте отображается не правильно - местами вообще отсутствует, а местами отсвечивается неверно. В итоге, чтобы его прочитать, приходится елозить мышкой по компоненту. Есть какая-нибудь возможность исправить это?
Это сообщение отредактировал(а) solan - 6.6.2009, 12:31 |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Выложи минимальный компилируемый пример с этой проблемой.
|
|||
|
||||
| solan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 23.5.2009 Репутация: нет Всего: нет |
http://webfile.ru/3682737
Нажимаете кнопку и в окно добавляется строка с интервалом 100мс. Сразу скажу - тут никаких проблем нет. Компонент сразу обновляется и добавленный текст отображается корректно. В той программе где происходит вышеописанная ситуация текст добавляется с интервалом 1с из двух потоков (небольшой блок текста, строчек 30). Не знаю - в этом ни в этом проблема, но она есть. Причом там ползунок скролбара остается на середине (так и не понял какое свойство за это отвечает). интерфейс для той программы делался в QDesigner, а эта маленькая в Qt Creator. (хотя с виду designer был просто интегрирован в creator). Ту прогу я не могу выложить - но вот такие дела. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Значит ищите проблему в своем коде. P.S.: работа с гуишными элементами из дополнительного потока противопоказана. Об этом в документации написано. |
|||
|
||||
| solan |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 23.5.2009 Репутация: нет Всего: нет |
надо было с пс начинать. Что я могу сказать - первое разочарование от qt. Я считаю - это вполне нормальная ситуация когда элементом ввода или вывода нужно воспользоваться из разных потоков. |
||||
|
|||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
А это никак не связано с Qt.
Это проблема дизайна приложения. Вместо того, чтобы напрямую обращаться к GUI нужно организовать механизм, когда главный поток должен узнать, что из дочернего потока можно забрать результат его работы. Переменные, флаги, сообщения, очереди. Я бы порекомендовал тебе создать в главном потоке слот типа slotWriteLog(QString str), а в дополнительном потоке сигнал типа signalWriteLog(QString str). Законнектить их. Внутри слота slotWriteLog делать append твоего текста. А внутри дочернего потока emit signalWriteLog(). Это должно привести к тому, что дочерний поток добавит в очередь главного потока событие и одновременно передаст нужный текст. И когда главный поток будет "свободен" он обработает это событие. |
|||
|
||||
| solan |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 23.5.2009 Репутация: нет Всего: нет |
Как это не связанно?? Это проблема компонента Qt - QTextEdit, вы сами это сказали.
Или вы имеете ввиду стандартный элемент управления WinApi edit- но с ним все в порядке. И в диалоговое окно, которое его содержит можно легко добавлять сообщения из разных потоков. У каждого потока - свой цикл обработки сообщений. Все взаимодействие пользователя с элементами управления осуществляется в винде посредством сообщений. Если, предположим я добавляю тем же эпендом какую то строку из одного потока в компонент другого потока - на более низком уровне всеравно формируется сообщение, которое ставится в очередь того потока где принимающий элемент. Логично? Просто на winapi это нужно было бы делать явно. _____________________________
Спасибо за совет, пожалуй я так и сделаю. Это сообщение отредактировал(а) solan - 7.6.2009, 14:51 |
||||||
|
|||||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |