Название: "The program has unexpectedly finished" где ошибка? (( Отправлено: Белый пони от Ноябрь 28, 2009, 01:11 имеется виджет с четырьмя QLabel'ами. Из потока в виджет поступают числа int. И надо чтобы они по очереди записывались в 1-ый, 2-ой, 3-ий, 4-ый, 1-ый и т.д. label'ы. Для этого я собрал лабелы в массив и сделал переменную которая задаёт номер лейбла куда записыват текущее число, полученное из цикла.
Вот главный виджет: blinkWidget.h: Код: #include <QtGui/QWidget> blinkWidget.cpp: Код: #include "blinkwidget.h" Ну и поток на всякий случай: mythread.h: Код: #include <QThread> mythread.cpp: Код: #include "mythread.h" При компиляции никаких ошибок и предупреждений не находит(( Программа запускается и сразу останавливается. Application output: Цитировать Starting /qtest/zikl array of labels/zikl... The program has unexpectedly finished. /qtest/zikl array of labels/zikl exited with code 0 Что же делать?( Название: Re: "The program has unexpectedly finished" где ошибка? (( Отправлено: pastor от Ноябрь 28, 2009, 01:27 А что это за коннект такой?
Цитировать connect(mythread, SIGNAL(update_hex(QString)), LabelArray[ currentRow ], SLOT(setText(QString))); currentRow индекс нигде неинициализирован, соответсвенно в нем мусор. При помощи этого мусора ты получаешь указатель неизвено куда - отсюда и вылет. ЗЫ: Цитировать connect(ui->myStopBut, SIGNAL(clicked()), mythread, SLOT(terminate())); Неисспользуй terminate(), это не есть нормальным завершением потока. Цитировать Warning: This function is dangerous and its use is discouraged. The thread can be terminate at any point in its code path. Threads can be terminated while modifying data. There is no chance for the thread to cleanup after itself, unlock any held mutexes, etc. In short, use this function only if absolutely necessary. Название: Re: "The program has unexpectedly finished" где ошибка? (( Отправлено: Белый пони от Ноябрь 28, 2009, 01:36 А что это за коннект такой? Цитировать connect(mythread, SIGNAL(update_hex(QString)), LabelArray[ currentRow ], SLOT(setText(QString))); currentRow индекс нигде неинициализирован, соответсвенно в нем мусор. При помощи этого мусора ты получаешь указатель неизвено куда - отсюда и вылет. Я пытался его инициализировать в blinkWidget.cpp - закомментенная строка "currentRow = 2;", но в этом случае все числа записываются только в этот элемент Label под номером 2. Надо где-то в другом месте инициализировать? Или я объявил не там где надо? ??? Цитировать Неисспользуй terminate(), это не есть нормальным завершением потока. Да, читал(( Попробовал сначала quit(), но он сходу не заработал. Отложил эту проблему на потом) Название: Re: "The program has unexpectedly finished" где ошибка? (( Отправлено: pastor от Ноябрь 28, 2009, 02:52 Как по мне, 2 сигнала ненужно, достаточно одного:
Код
Код
Код
Код
Код
Название: Re: "The program has unexpectedly finished" где ошибка? (( Отправлено: Белый пони от Ноябрь 28, 2009, 12:08 Спасибо! :)
Сделал так. А где объявлять и инициализировать массив LabelArray в этом случае? пробовал в blinkWidget.h: Код: class blinkWidget : public QWidget /qtest/zikl array of labels/blinkwidget.h:20: error: ISO C++ forbids declaration of ‘QLabel’ with no type /qtest/zikl array of labels/blinkwidget.h:20: error: expected ‘;’ before ‘*’ token Потом попробовал в ui_blinkWidget.h: Код: class Ui_blinkWidgetClass Дальше пробую инициализировать в blinkWidget.cpp. Если так: Код: blinkWidget::blinkWidget(QWidget *parent) то выдаётся 2 ошибки: /qtest/zikl array of labels/blinkwidget.cpp:10: error: expected primary-expression before ‘{’ token /qtest/zikl array of labels/blinkwidget.cpp:10: error: expected `;' before ‘{’ token А если так: Код: blinkWidget::blinkWidget(QWidget *parent) В принципе, программа работает. Но в будущем label'ов будет больше 4-ых, и в ручную из инициализировать будет долго. Хочется на будущее понять, почему одно и то же объявелние в одним .h - файле работает, а в другом - нет? И как правильно инициализировать массив типа такого? Название: Re: "The program has unexpectedly finished" где ошибка? (( Отправлено: pastor от Ноябрь 28, 2009, 13:27 Сделай так:
Код
Код
Доступ к i-му лейблу: Код
Название: Re: "The program has unexpectedly finished" где ошибка? (( Отправлено: Белый пони от Ноябрь 29, 2009, 00:40 Понятно! Спасибо за помощь! :)
|