| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Поток [Qt] |
| Автор: BIV 23.10.2010, 17:54 | ||||
| Всем доброе время суток! У меня проект состоит из основного окна MainWindow и окна диалога Dialog. В оене диалога один компонент label. Проблема в том, что в файле диалогового окна Dialog.cpp есть функция, которая очень долго выполняется. Получается такая ситуация, что при вызове из главного окна диалоговое окно, то диалоговое окно появиться не сразу, а спустя некоторое время. Пришел к выводу, что нужно создавать поток. Идея такая: пусть запуститься сразу окно с просьбой подождать выполнение, и через некоторое время выводятся данные. Вот возникает проблема передачи данных в label, так как Dialog и MyThread разные классы. Как это сделать? Вот мои попытки реализовать свой замысел: Заголовочный файл dialog.h:
dialog.cpp:
|
| Автор: BIV 24.10.2010, 09:56 | ||||
| Ошибочки вылетают Файл .h
Файл .cpp
Я наверно неправильно определяю ссылку на 4 строчке m_DialogThread(new MyThread) Без этой записи тоже ругается. Как правильно задавать? |
| Автор: null56 24.10.2010, 14:44 |
| оператор new нужен только для указателей на объекты. убери 4 строчку. если будут ошибки, опубликуй их сюда, мы не телепаты |
| Автор: BIV 24.10.2010, 15:14 |
| Ошибка. Указывает на 3 строчку undefined reference to 'MyThread::MyThread(QWidget*)' collect2: Id returned 1 exit status неопределенная ссылка на 'MyThread::MyThread(QWidget*)' collect2: Идентификатор возвратил 1 статусу выхода |
| Автор: null56 24.10.2010, 16:14 | ||
нет тела конструктора или не компилится cpp файл в котором определен конструктор класса MyThread. у вас конструктор где - нибудь определен?
|
| Автор: BIV 24.10.2010, 17:24 | ||||
| Точно, конструктора небыло. Я добавил пустой конструктор. Оши бок не стало, но и лучше тоже Вот файл .h
Файл .cpp
|
| Автор: null56 24.10.2010, 21:53 | ||||||
dialog.h (классы диалога и дочернего потока)
dialog.cpp
main.cpp
|
| Автор: BIV 24.10.2010, 23:05 |
| Сделал все как Вы писали, но проблема никак не решается: не срабатывает void MyThread :: run() Я решил отправить мою заготовку, так как по нему, думаю, будет проще решать проблему. Значит основная проблема, это сразу при вызове открыть диалоговое окно, а уже как прога получит данные, тогда и внесет. Моя программка еще разрабатывается, так что там еще много чего пока не работает. http://file.qip.ru/file/WW-UCZc1/Admin1.html ( 33.31 Kb ) Запуск того диалогового окна через меню Сервис->Внешний IP |
| Автор: null56 24.10.2010, 23:14 | ||
| вы диалог вызываете через exec, в моем примере я перегружал метод show добавьте перегрузку метода exec в dialog
|
| Автор: BIV 24.10.2010, 23:33 |
| Ууффф, что надо Спасибо, Вам большое за такую колосальную работу. Очень помогли |