Russian Qt Forum

Qt => Общие вопросы => Тема начата: WinnieThePooh от Июль 30, 2012, 08:26



Название: Функция выполняется после завершения программы.
Отправлено: WinnieThePooh от Июль 30, 2012, 08:26
Собственно, есть функция/метод которая почему-то выполняется в программе послее завершения, функция вызыватеся через слот присоеденненый к сигналу. Например, если привязать слот к кнопке и нажать на нее 5 раз, то ничего не прозойдет, но если закрыть все окна, эта функция выполнится 5 раз. Как решить эту проблему? Заранее спасибо.

Вызываю новое окошко в главном окне:
Код
C++ (Qt)
void MainWindow::on_actionAddUrl_activated()
{
 
  //f_addUrls* addUrl = new f_addUrls;
   f_addUrls addUrl;
  if ( addUrl.exec() )
  {
 
  }
}

В конструкторе нового окна:
Код
C++ (Qt)
ui->setupUi(this);
connect(ui->getUrls, SIGNAL(clicked()), this,SLOT(getUrls()));
 
Сама функция :
Код
C++ (Qt)
void f_addUrls::getUrls()
{
  UrlManager Urls;
  QList<QString> uList = Urls.readFromBuffer();
  QString strUrls=Urls.toQString(uList);
  std::cout<<"бла-бла";
  ui->UrlsBrowser->setText(strUrls);
}

Вот так работает нормально:
Код
C++ (Qt)
void f_addUrls::getUrls()
{
ui->UrlsBrowser->setText("бла-бла");
}


Название: Re: Функция выполняется после завершения программы.
Отправлено: ddrtn от Июль 30, 2012, 09:11
Точно в функцию не заходит? точки останова ставил?

а если так написать?
Код:
std::cout<<"бла-бла" << std::endl;


Название: Re: Функция выполняется после завершения программы.
Отправлено: WinnieThePooh от Июль 30, 2012, 09:20
sdt::cout я вставил для проверки, если писать qDebug,то сообщение выводится когда надо, но остальное всеравно не работает вовремя.


Название: Re: Функция выполняется после завершения программы.
Отправлено: ddrtn от Июль 30, 2012, 09:23
А можно весь код?


Название: Re: Функция выполняется после завершения программы.
Отправлено: WinnieThePooh от Июль 30, 2012, 09:43
Да, вот http://dl.dropbox.com/u/35777135/fdd.7z (http://dl.dropbox.com/u/35777135/fdd.7z)


Название: Re: Функция выполняется после завершения программы.
Отправлено: VPS от Июль 30, 2012, 15:27
Вы забыли инициализировать переменную "j" и приравнять её к нулю в методе:

Код:
QList<QString> UrlManager::readFromBuffer()
{
    QClipboard *clipboard = QApplication::clipboard();
    QString originalText = clipboard->text();
    QList<QString> uList;
    qint32 j,i = 0;

         while ((j = originalText.indexOf("http", j)) != -1)
         {
             for(qint32 d =0;d < 1; d++)
             {
                 i = originalText.indexOf("\n", j);
             //конец ссылки
              uList.push_back(originalText.mid(j,i-j));
             }
             ++i;
             ++j;
             qDebug("Bla1-Bla2");


         }


    return uList;
}

Если напишите: qint32 j = 0, i = 0; вместо qint32 j,i = 0; то всё заработает...


Название: Re: Функция выполняется после завершения программы.
Отправлено: WinnieThePooh от Июль 30, 2012, 16:38
Огромное тебе спасибо. Я из-за этой проблемы несколько дней убил.
Всего лишь забыл присвоить значение переменной %)