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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Функция выполняется после завершения программы.  (Прочитано 4067 раз)
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("бла-бла");
}
Записан
ddrtn
Гость
« Ответ #1 : Июль 30, 2012, 09:11 »

Точно в функцию не заходит? точки останова ставил?

а если так написать?
Код:
std::cout<<"бла-бла" << std::endl;
Записан
WinnieThePooh
Гость
« Ответ #2 : Июль 30, 2012, 09:20 »

sdt::cout я вставил для проверки, если писать qDebug,то сообщение выводится когда надо, но остальное всеравно не работает вовремя.
Записан
ddrtn
Гость
« Ответ #3 : Июль 30, 2012, 09:23 »

А можно весь код?
Записан
WinnieThePooh
Гость
« Ответ #4 : Июль 30, 2012, 09:43 »

Да, вот http://dl.dropbox.com/u/35777135/fdd.7z
Записан
VPS
Гость
« Ответ #5 : Июль 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; то всё заработает...
Записан
WinnieThePooh
Гость
« Ответ #6 : Июль 30, 2012, 16:38 »

Огромное тебе спасибо. Я из-за этой проблемы несколько дней убил.
Всего лишь забыл присвоить значение переменной %)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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