Russian Qt Forum

Qt => Вопросы новичков => Тема начата: qtnoob от Май 02, 2012, 06:37



Название: Можно ли в Слот передать два параметра?
Отправлено: qtnoob от Май 02, 2012, 06:37
Код
C++ (Qt)
private slots:
   void on_pushButton_clicked();
   void replyFinish(QNetworkReply*, QString &str);
   void replyFinish2(QNetworkReply*);
 
 
void MainWindow::on_pushButton_clicked()
{
   QString siteUrl = "http://google.com/complete/search?output=toolbar&hl=ru&js=true&qu=" + ui->inpBoxKeyWord->text();
 
   QNetworkAccessManager *pManager = new QNetworkAccessManager;
   pManager->get(QNetworkRequest(QUrl(siteUrl)));
 
   connect(pManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinish(QNetworkReply*, siteUrl)));
 
}
 


Мучаюсь, ни где немогу найти ответ.

Подскажите пожалуйста.


Название: Re: Можно ли в Слот передать два параметра?
Отправлено: Bepec от Май 02, 2012, 07:05
Эм... А голова работать у тебя будет?

В твоём слоте второй параметр скорее всего вякнет, что так нельзя.

Что тебе мешает просто использовать siteURL в слоте?


Название: Re: Можно ли в Слот передать два параметра?
Отправлено: LisandreL от Май 02, 2012, 08:06
Можно ли в Слот передать два параметра?
Можно, если в сигнале у вас будет 2 или более параметров.
Ещё можно как функцию слот вызывать.
А такого синтаксиса коннекта, как вы хотите, нет.


Название: Re: Можно ли в Слот передать два параметра?
Отправлено: qtnoob от Май 02, 2012, 19:48
Дело в том что хочу переписать с php парсер подсказок в google,

Как реализовать вызовы
Код
PHP
$sugg_data = file_get_contents($url2google);

Видете тут сначало вызывается дефолтный урл потом через foreach
у дефолтному прибавляется значения и массива $key_adds.

Вот почему мне нужен второй параметр, в первом слоте на событие клик я загружаю
дефолтный урл, а потом мне надо прердать это всё в дргой слот

как то так, подскажите как лучше, или сделать всё в 1 слоте....

да и ещё кто какбы записал Массив, QList или QMap? тут тоже запарка...

Как регулярку записать, QRegex rx(""); ругается на слэши.....


Спасибо вам!!
Код
PHP
set_time_limit(300);
$lang = 'en';            //Язык
$keyword = $_GET['keywords'];    //Ключевик
 
if ($keyword < empty($keyword)) {
echo "";}
else {
 
$keyword = urlencode($keyword);
 
$url2google = 'http://google.com/complete/search?output=toolbar&hl='.$lang.'&js=true&qu='.$keyword;
 
$key_adds = array('+1','+2','+3','+4','+5','+6','+7','+8','+9','+0',
           '+a','+b','+c','+d','+e','+f','+g','+h','+i','+j','+k',
           '+l','+m','+n','+o','+p','+q','+r','+s','+t','+u','+v',
           '+w','+x','+y','+z');
 
$sugg_data = file_get_contents($url2google);
 
foreach ($key_adds as $value){
 
   $sugg_data .= file_get_contents($url2google.$value);
 
}
 
preg_match_all('/(?<=\<suggestion data\=\")[\w\W]*?(?=\"\/\>)/',$sugg_data,$sugg_tmp);
 
$sugg_tmp2 = implode('<br>
'
,$sugg_tmp[0]);
 
preg_match_all('/(.*)/',$sugg_tmp2,$sugg_fin);
 
echo implode($sugg_fin[1]);
 
//echo implode('',$sugg_fin[1]);
}


Название: Re: Можно ли в Слот передать два параметра?
Отправлено: qtnoob от Май 02, 2012, 21:42
ПРИКРЕПИЛ ИСХОДНИК!

Почему-то окно очищается и иногда последние результаты высвечиваются
Направте пожалуйста, что не так.


Название: Re: Можно ли в Слот передать два параметра?
Отправлено: Bepec от Май 02, 2012, 23:13
Помоему редкий случай соответствия форумного ника и уровня знаний ;)

По теме: не пытайся копировать другой язык - всёравно ничего не выйдет(а то, что выйдет, будет ужасным). Лучше напиши своё на С++.


Название: Re: Можно ли в Слот передать два параметра?
Отправлено: qtnoob от Май 03, 2012, 01:33
Лучше бы подсказал,  я бы выучился на примере.


Помоему редкий случай соответствия форумного ника и уровня знаний ;)

По теме: не пытайся копировать другой язык - всёравно ничего не выйдет(а то, что выйдет, будет ужасным). Лучше напиши своё на С++.


Название: Re: Можно ли в Слот передать два параметра?
Отправлено: V1KT0P от Май 03, 2012, 03:50
Лучше бы подсказал,  я бы выучился на примере.
Лучше для начала подучи С++. Вот например первая попавшаяся строка:
Код:
QNetworkAccessManager *pManager = new QNetworkAccessManager;
Ты выделяешь память которую нигде не освобождаешь, получаешь утечку памяти. Насчет того что последний результат. На один твой запрос срабатывает несколько раз replyFinish, я не разбирался подробно как работает QNetworkAccessManager, но возможно сигнал finished вызывается каждый раз при получении данных, даже если это не всего-лишь кусок данных. По крайней мере я сразу получаю указатель на QNetworkReply из QNetworkAccessManager и подключаюсь к сигналу readChannelFinished. Отрабатывает четко один раз после принятия окончательного принятия данных.