![]() |
|
![]() ![]() ![]() |
|
BIV |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 20.12.2007 Репутация: нет Всего: 1 |
Всем доброе время суток!
У меня проект состоит из основного окна MainWindow и окна диалога Dialog. В оене диалога один компонент label. Проблема в том, что в файле диалогового окна Dialog.cpp есть функция, которая очень долго выполняется. Получается такая ситуация, что при вызове из главного окна диалоговое окно, то диалоговое окно появиться не сразу, а спустя некоторое время. Пришел к выводу, что нужно создавать поток. Идея такая: пусть запуститься сразу окно с просьбой подождать выполнение, и через некоторое время выводятся данные. Вот возникает проблема передачи данных в label, так как Dialog и MyThread разные классы. Как это сделать? Вот мои попытки реализовать свой замысел: Заголовочный файл dialog.h:
dialog.cpp:
Это сообщение отредактировал(а) BIV - 23.10.2010, 22:33 |
||||
|
|||||
null56 |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
что тебе мешает сделать MyThread переменной - членом класса Dialog
и передавать данные, как сообщения (customEvent) или через механизм сигналов/слотов от нити к диалогу
генери новые значения в потоке в виде сингалов, когда тебе это нужно
ЗЫ: у Qlabel есть слот на изменение текста
но тут объект передается по ссылке и без дополнительных средств синхронизации объекта QString тут не обойтись Это сообщение отредактировал(а) null56 - 24.10.2010, 01:29 |
||||||||||
|
|||||||||||
BIV |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 20.12.2007 Репутация: нет Всего: 1 |
Ошибочки вылетают
Файл .h
Файл .cpp
Я наверно неправильно определяю ссылку на 4 строчке m_DialogThread(new MyThread) Без этой записи тоже ругается. Как правильно задавать? |
||||
|
|||||
null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
оператор new нужен только для указателей на объекты. убери 4 строчку. если будут ошибки, опубликуй их сюда, мы не телепаты
|
|||
|
||||
BIV |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 20.12.2007 Репутация: нет Всего: 1 |
Ошибка. Указывает на 3 строчку
undefined reference to 'MyThread::MyThread(QWidget*)' collect2: Id returned 1 exit status неопределенная ссылка на 'MyThread::MyThread(QWidget*)' collect2: Идентификатор возвратил 1 статусу выхода Это сообщение отредактировал(а) BIV - 24.10.2010, 15:16 |
|||
|
||||
null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
нет тела конструктора или не компилится cpp файл в котором определен конструктор класса MyThread. у вас конструктор где - нибудь определен?
|
|||
|
||||
BIV |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 20.12.2007 Репутация: нет Всего: 1 |
Точно, конструктора небыло. Я добавил пустой конструктор. Оши бок не стало, но и лучше тоже
Вот файл .h
Файл .cpp
|
||||
|
|||||
null56 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
dialog.h (классы диалога и дочернего потока)
dialog.cpp
main.cpp
|
||||||
|
|||||||
BIV |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 20.12.2007 Репутация: нет Всего: 1 |
Сделал все как Вы писали, но проблема никак не решается: не срабатывает void MyThread :: run()
Я решил отправить мою заготовку, так как по нему, думаю, будет проще решать проблему. Значит основная проблема, это сразу при вызове открыть диалоговое окно, а уже как прога получит данные, тогда и внесет. Моя программка еще разрабатывается, так что там еще много чего пока не работает. http://file.qip.ru/file/WW-UCZc1/Admin1.html ( 33.31 Kb ) Запуск того диалогового окна через меню Сервис->Внешний IP |
|||
|
||||
null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
вы диалог вызываете через exec, в моем примере я перегружал метод show
добавьте перегрузку метода exec в dialog
|
|||
|
||||
BIV |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 219 Регистрация: 20.12.2007 Репутация: нет Всего: 1 |
Ууффф, что надо
![]() Спасибо, Вам большое за такую колосальную работу. Очень помогли |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, 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. |