Russian Qt Forum
Мая 19, 2025, 01:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: сигнал и гуи  (Прочитано 6338 раз)
StatuS74
Гость
« : Сентября 23, 2011, 14:12 »

Проблема в следующем...
есть коннект
Код:
test * test_1 = new test;

 connect (test_1,SIGNAL(signal_sn(QString)),this,SLOT(end_test(QString)),Qt::QueuedConnection);
проверял возвращает true.
но когда программа доходит до эмита то не происходит действия описанные в слоте end_test(QString)
Код:
void MainWindow::end_test(QString sn)
{
    if (sn.toInt()==serial1_1.toInt())
        {
        t->terminate();
        t->wait();
         ui->labSendLamp->setPixmap(QPixmap(QString::fromUtf8(":/circle_yellow.png")));

        }
    if (sn.toInt()==serial2.toInt())
        {
        t2->terminate();
        t2->wait();
         ui->labSendLamp_2->setPixmap(QPixmap(QString::fromUtf8(":/circle_yellow.png")));
        }
........

не могу решить проблемы с этим
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Сентября 23, 2011, 14:34 »

В слот не заходит или заходит но в sn что-то левое?
Записан
StatuS74
Гость
« Ответ #2 : Сентября 23, 2011, 14:35 »

он в слот вообще не заходит
Записан
blood_shadow
Гость
« Ответ #3 : Сентября 23, 2011, 15:08 »

он в слот вообще не заходит
давай больше кода, особенно интересно то место где у тебя живут потоки,
кстати, так t->terminate(); потоки лучше не завершать, это потенциально опасная операция,
лучше определи ф-цию типа stop() в которой и останавливай свой поток
Записан
StatuS74
Гость
« Ответ #4 : Сентября 26, 2011, 05:59 »

поток гуляет тут

Код:
 void test::run()
    {     bool fl=false;
          int grad =0;
          bool t3 = false;

             connect(this, SIGNAL(signal_win(QString)),SLOT(mysignal_win(QString)));
                   connect(this, SIGNAL(signal_fail1(QString)),SLOT(mysignal_fail1(QString)));
                   connect(this, SIGNAL(signal_fail2(QString)),SLOT(mysignal_fail2(QString)));


          fl=test::tempiratura_datchika(tna_,file_name_,nms_,ftHandle1_,serial_);
           if (fl == true)
           {  grad = test::Start_test(tk_,file_name_,nms_,ftHandle1_,serial_,time_okonch_);
              if (grad>=tk_-0.5)
              {
                 t3 = test::time_test_2(time_okonch_,file_name_,ftHandle1_,serial_,t3);
                if (t3==true)
                 {
{
                      emit signal_sn(serial_);<=== испускаю сигнал который не работает
                      emit signal_win(serial_);<==== этот сигнал работает
...............
Записан
StatuS74
Гость
« Ответ #5 : Сентября 26, 2011, 06:51 »

"лучше определи ф-цию типа stop() в которой и останавливай свой поток"


так я не останавливаю поток а убиваю его. что бы потом создать опять с новыми параметрами только. операция пока не дает сбой вроде все норм. но со слотом так и не пойму понять что за ерунда такая
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #6 : Сентября 26, 2011, 07:32 »

Что происходит в mysignal_win?
Записан
StatuS74
Гость
« Ответ #7 : Сентября 26, 2011, 07:47 »

выводится сообщение и все


Код:
void test::mysignal_win( QString serial_ms)
                  {


                      QMessageBox::warning(0,"ГОТОВО",
                                             "Тестирование завершено для датчика с серийным номером  "
                                                                                +serial_ms,
                                                                                 QMessageBox::Ok,QMessageBox::Ok);



                  }

« Последнее редактирование: Сентября 26, 2011, 10:10 от StatuS74 » Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #8 : Сентября 26, 2011, 10:16 »

QMessageBox::warning? Из потока?
То есть на всё, что раньше мы вам писали вы забили. В замешательстве
Ну удачи с проектом.
Записан
StatuS74
Гость
« Ответ #9 : Сентября 26, 2011, 10:21 »

а что не так ?  я просто не понимаю программа не валится при отправки сообщения через слот. вы говорили что в потоке сообщения не  алё.. я исправил вот на это забулькало. до этого падала программа когда делал вывод сообщения не посредственно в run.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #10 : Сентября 26, 2011, 10:58 »

...
я исправил вот на это забулькало.
...
У меня одного фраза "забулькало" вызвала нехорошие ассоциации? Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
StatuS74
Гость
« Ответ #11 : Сентября 26, 2011, 11:08 »

...
я исправил вот на это забулькало.
...
У меня одного фраза "забулькало" вызвала нехорошие ассоциации? Улыбающийся

это в смысле заработало =)
Записан
blood_shadow
Гость
« Ответ #12 : Сентября 26, 2011, 11:24 »

У меня одного фраза "забулькало" вызвала нехорошие ассоциации? Улыбающийся
у меня тоже, короче выходные удались  Смеющийся
Записан
StatuS74
Гость
« Ответ #13 : Сентября 26, 2011, 12:46 »

кто нибуть знает из за чего такая проблема может быть ?*
Записан
shirushizo
Гость
« Ответ #14 : Сентября 26, 2011, 13:03 »

QMessageBox в гуи-поток убрать. Например, в главное окно, из которого потоки запускаются MainWindow::mysignal_win(QString).

Ну и закомментить emit signal_sn(serial_); и посмотреть будет ли работать MainWindow::end_test().
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.021 секунд. Запросов: 19.