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