![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
mrjoker |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 9.7.2008 Пользователь №: 228 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Помогите, пожалуйста, решить такую проблему:
Мне нужно выводить информацию в QTableWidget в потоке boost::thread. Не могли бы вы подсказать, как это сделать? Поток должен быть только boost'овский. Если с QTableWidget - проблемно, то тогда с каким объектом и главное как? |
|
|
Andrew Selivanov |
![]()
Сообщение
#2
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
Помогите, пожалуйста, решить такую проблему: Мне нужно выводить информацию в QTableWidget в потоке boost::thread. Не могли бы вы подсказать, как это сделать? Поток должен быть только boost'овский. Если с QTableWidget - проблемно, то тогда с каким объектом и главное как? думаю смешивать работу с потоками двух разных либ не очень хорошая идея... ну наверное поток в котором у тебя живет QTable должен дергать поток boost на предмет готовы ли данные, если данные готовы, копировать их к себе и отображать. Можно сделать это через volatile переменную и sleep или средства более высокого уровня (boost::condition...) |
|
|
ViGOur |
![]()
Сообщение
#3
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Пускай так ты создаешь свой виджет:
После чего передаешь в поток указатель tableWidget и работаешь с ним:
|
|
|
mrjoker |
![]()
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 9.7.2008 Пользователь №: 228 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Пускай так ты создаешь свой виджет: После чего передаешь в поток указатель tableWidget и работаешь с ним:
Я создал свой класс CMyTableWidget1
А в основном классе окна делаю следующее:
Тогда после запуска программы, в основном окне появляется таблица со столькими строками, сколько успело появится до появления окна на экране. Далее при любом действии типа "скрыл окно-развернул окно", информации переписывается, а количество строк не изменяется. Сообщение отредактировал mrjoker - 9.7.2008, 15:11 |
|
|
ViGOur |
![]()
Сообщение
#5
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Так ты сам изменяй их количество.
![]() |
|
|
mrjoker |
![]()
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 9.7.2008 Пользователь №: 228 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
ViGOur |
![]()
Сообщение
#7
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Вот, я набросал пример как:
|
|
|
Tonal |
![]()
Сообщение
#8
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
В Qt с виджетами можно работать только в одном потоке - главном.
Если нужно что-то с ними делать в других потоках, то надо или создавать общие данные и синхронизировать их, или посылать Qt-ёвые сигналы или события. |
|
|
31512 |
![]()
Сообщение
#9
|
![]() Студент ![]() Группа: Новичок Сообщений: 26 Регистрация: 13.3.2008 Из: Красноярск Пользователь №: 119 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Есть 2 способа работать с виджетами в потоке:
1. Создавать переменные и из потока заполнять их значениями. Потом вызывать метод типа Refresh и читать эти переменные в табличку. 2. По книжке Жасмин, Бланшет и др. (стр 464-465) Пусть в потоке есть метод типа
где "WriteToTable" - имя метода, в классе WidgetWhereTablePlaced (это форма, фрейм, диалог). В классе WidgetWhereTablePlaced должен быть метод с названием WriteToTable с теми же параметрами, в котором и происходит заполнение таблички. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 6.12.2023, 21:42 |