Название: Снова сигнал-слот
Отправлено: crocus от Март 26, 2007, 09:36
Из \examples\dialogs взял configdialog, добавил в pages еще один pagesWidget AgentsPage::AgentsPage(QWidget *parent) : QWidget(parent) { QGroupBox *packagesGroup = new QGroupBox(tr("Agents")); agents_w = new Agents(this); со своим классом #include "network.h" ....... class Agents : public QWidget , работающим с базой и сетью, и при вызове слота в сетевом классе network_s = new Network(this); connect( this, SIGNAL( ready_Agent(QString &, QString &, QString &) ), network_s, SLOT( send_Agent(QString &, QString &, QString &) ) ); //// где- то ниже при нажатии на кнопку emit ready_Agent( agent_name_str, agent_mail_str, agency_str);
вываливается с ошибкой. First-chance exception at 0x77e4bee7 in realtorplus.exe: Microsoft C++ exception: [rethrow] @ 0x00000000. Unhandled exception at 0x00968c57 in realtorplus.exe: 0xC0000005: Access violation reading location 0x0000001c. (http://source.foliant.net.ru/error.png) Может по описанию ошибки кто скажет где накосячил??
Название: Снова сигнал-слот
Отправлено: Tonal от Март 26, 2007, 19:58
Забыл инициализировать какую-то переменную или член.
Название: Снова сигнал-слот
Отправлено: crocus от Март 27, 2007, 10:48
Ерунда какая-то - вылетает, когда передаются параметры, если вызываю любой другой слот (без параметров) например connect( agents_w, SIGNAL( ready_Agent(QString, QString, QString) ), network_a, SLOT( updatePaper() ) ); - коннект проходит, для проверки дописывал send_Agent("2", "2", "2") в "updatePaper()" - отрабатывает. Нашел где падает: void Network::send_Agent(QString &agent_n, QString &agent_m, QString &agency_c) { QString md5_str = genRandomMD5(); ////////////////////////////////////////////////////////////////////////// QHttpRequestHeader header( "POST", "/agent_ready.php", 1, 1 ); header.setValue( "Host", "foliant" ); header.setValue( "Content-type", "multipart/form-data, boundary=" + md5_str + "" ); header.setValue( "Cache-Control", "no-cache" ); header.setValue( "Accept", "*/*" ); QByteArray bytes; bytes.append( "--" + md5_str + "\r\n" ); bytes.append( "content-disposition: " ); bytes.append( "form-data; name=\"agency\"\r\n" ); bytes.append( "\r\n" ); bytes.append( "" + agency_c + "\r\n" ); bytes.append( "--" + md5_str + "\r\n" ); bytes.append( "content-disposition: " ); bytes.append( "form-data; name=\"name\"\r\n" ); bytes.append( "\r\n" ); bytes.append( "" + agent_n + "\r\n" ); bytes.append( "--" + md5_str + "\r\n" ); bytes.append( "content-disposition: " ); bytes.append( "form-data; name=\"mail\"\r\n" ); bytes.append( "\r\n" ); bytes.append( "" + agent_m + "\r\n" ); bytes.append( "--" + md5_str + "--" ); int contentLength = bytes.length(); header.setContentLength( contentLength ); httpRequestAborted = false; QMessageBox::information( this, tr( "Network module" ), tr( "A query to the server is not executed : %1, %2 , %3, %4." ) .arg( agent_n, agent_m, agency_c, md5_str)); /// убедился,что параметры и хэш в порядке httpGetId = http->request( header, bytes ); /// ВОТ ЗДЕСЬ И ПАДАЕТ!!! //http->request( header, bytes ); }
Работа с сетью практически полностью из /examples/network/http добавлено спустя 8 часов 8 минут: Нашел --- все косяки из-за отсутствия http->setHost(........... ); , хотя в хедере header.setValue( "Host", ......... ); присутствует и "file" void HttpWindow::httpRequestFinished(int requestId, bool error) { ..............................................
if (requestId != httpGetId) return;
progressDialog->hide(); file->close(); // здесь!!!
if (error) { file->remove(); /// и здесь ............................................... } , т.е. при отсутствии "setHost" попадало на "file->remove();" и вылетало, а после правки стало вылетать на "file->close();", пока в конструкторе не прописал file = new QFile.
|