Здравствуйте, гость ( Вход | Регистрация )
_canavar | Дата 30.3.2009, 13:43 |
Огромное спасибо! Теперь стало понятно. | |
igor_bogomolov | Дата 30.3.2009, 1:55 |
2 canavar Внимательние читайте предыдущие сообщения. Нельзя работать с виджетами в дочернем потоке. Что такое addItem()? У QTableWidget нет такого метода. Или там должен быть QListWidget? В дочернем потоке нужно производить вычисления, а результат высылать через сигнал. Ловить этот сигнал в Gui потоке, и в нем устанавливать значения для таблиц и списков. Привыкаем к следущему объявлению void add(const QString &a) |
|
canavar | Дата 29.3.2009, 22:13 |
Хорошо. | |
trdm | Дата 29.3.2009, 21:39 |
ManageThread.h: Раскрывающийся текст
Пользуйся пожалуйста тегом [ expand ] [ / expand ] |
|
canavar | Дата 29.3.2009, 20:36 |
ManageThread.h
ManageThread.cpp
Вызывается из конструктора viewer.cpp (viewer -- наследник QDialog):
_mgThread объявлен в viewer.h:
|
|
ViGOur | Дата 29.3.2009, 20:19 |
Все равно экземпляры класса, наследовонного от QThread, будут создаваться в "Gui_class", так и коннекты между ними лучше делять тамже. Это верно, но не всегда. Если у тебя большой проект, то лучше все же разнести по управляющим классам.Так можно узнать почему, если я использую exec() у меня вылезает exception, а если бесконечный цикл, то все нормально? На вскидку пока ничего не приходит в голову. Покажи код. |
|
canavar | Дата 29.3.2009, 20:07 |
Спасибо за ответы. Так можно узнать почему, если я использую exec() у меня вылезает exception, а если бесконечный цикл, то все нормально? |
|
igor_bogomolov | Дата 29.3.2009, 20:03 |
ИМХО. Я так понимаю, что это от реализации программы зависит. Чтобы имитировать сигнал никаких указателей не нужно. Вот уже где распологается коннект, это другое дело. Все равно экземпляры класса, наследовонного от QThread, будут создаваться в "Gui_class", так и коннекты между ними лучше делять тамже. connect(&thread, SIGNAL(thread_signal()), this, SLOT(gui_slot())); |
|
ViGOur | Дата 29.3.2009, 19:46 |
Но мы же не можем работать с виджетыми в дочернем потоке. Все работа с ними производится только в осносном Gui потоке. Все правильно, но для того, чтобы послать сигнал какому-либо виджету нужен как минимум указатель на объект класса, который может их контролировать.В посте выше я забыл сказать насчет сигналов и слотов, но Litkevich Yuriy меня дополнил. |
|
igor_bogomolov | Дата 29.3.2009, 18:11 |
Но я не понимаю, как сделать так, чтобы второй поток смог изменять Widget'ы на форме QDialog. Можно конечно в поток передавать указатели на Widget'ы Без указателей ну никак не обойтись Но мы же не можем работать с виджетыми в дочернем потоке. Все работа с ними производится только в осносном Gui потоке. ![]() |
|
Просмотр темы полностью (откроется в новом окне) | |
![]() |
Текстовая версия | Сейчас: 3.12.2023, 9:37 |