crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
k0p4
  опции профиля:
сообщение 30.9.2010, 23:42
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 18.10.2009
Пользователь №: 1160

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго временисуток. Подскажите пожалуйста, как правильнопользоваться.
В коде :
 connect(ui->webView->page(),SIGNAL(downloadRequested(QNetworkRequest)),
            d,SLOT(downloadRequested(QNetworkRequest)));

...

void WebBrowser::downloadRequested(QNetworkRequest *request)
{
    QUrl url = request->url();
    QMessageBox msgBox;
    msgBox.setText("ROBIT");
    msgBox.exec();
    emit downLoadRequested(url);
}

работать отказывается. Похоже, я что-то упускаю. Как LinkDelegationPolicy, в сигнале linkClicked();


Извиняюсь, неправильнокод вставил...
 connect(ui->webView->page(),SIGNAL(downloadRequested(QNetworkRequest)),
            this,SLOT(downloadRequested(QNetworkRequest)));
    connect(this,SIGNAL(downLoad(QUrl*)),d,SLOT(connectItem(QUrl)));


...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 1.10.2010, 6:41
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


1) а где находится и каким типом является переменная d ?
2) где вызывается код
Цитата(k0p4 @ 1.10.2010, 2:42) *
connect(ui->webView->page(),SIGNAL(downloadRequested(QNetworkRequest)),
this,SLOT(downloadRequested(QNetworkRequest)));
connect(this,SIGNAL(downLoad(QUrl*)),d,SLOT(connectItem(QUrl)));

?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
k0p4
  опции профиля:
сообщение 1.10.2010, 13:18
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 18.10.2009
Пользователь №: 1160

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 1.10.2010, 6:41) *
1) а где находится и каким типом является переменная d ?
2) где вызывается код
Цитата(k0p4 @ 1.10.2010, 2:42) *
connect(ui->webView->page(),SIGNAL(downloadRequested(QNetworkRequest)),
this,SLOT(downloadRequested(QNetworkRequest)));
connect(this,SIGNAL(downLoad(QUrl*)),d,SLOT(connectItem(QUrl)));

?


 d = new downLoadDialog;
 .....
 d->show();
.....
class downLoadDialog : public QDialog
{
    Q_OBJECT
public:
....
public slots:
    void connectItem(QUrl link);
signals:
    void recived(QUrl url);
};

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 1.10.2010, 13:31
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


ну, справка говорит, что сигнал определён так

void QWebPage::downloadRequested ( const QNetworkRequest & request ) // [signal]

а ты указываешь
SIGNAL(downloadRequested(QNetworkRequest)

Затем,
Цитата
connect(ui->webView->page(),SIGNAL(downloadRequested(QNetworkRequest)),
d,SLOT(downloadRequested(QNetworkRequest)));

почему в SLOT указан сигнал ?

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
k0p4
  опции профиля:
сообщение 1.10.2010, 23:01
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 18.10.2009
Пользователь №: 1160

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 1.10.2010, 13:31) *
ну, справка говорит, что сигнал определён так

void QWebPage::downloadRequested ( const QNetworkRequest & request ) // [signal]

а ты указываешь
SIGNAL(downloadRequested(QNetworkRequest)

Затем,
Цитата
connect(ui->webView->page(),SIGNAL(downloadRequested(QNetworkRequest)),
d,SLOT(downloadRequested(QNetworkRequest)));

почему в SLOT указан сигнал ?


Эмм ну вообще-то это не сигнал а слот. И это слот обьекта downLoadDialog.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 2.10.2010, 10:06
Сообщение #6


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(k0p4 @ 1.10.2010, 0:42) *
connect(this,SIGNAL(downLoad(QUrl*)),d,SLOT(connectItem(QUrl)));

в сигнале указатель на QUrl а в слоте QUrl.
Естественно это не сработает.

П.С.
и все же называй сигналы и слоты разными именами, а тов едь так запутаться не сложно.
Это я про downloadRequested(QNetworkRequest)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
k0p4
  опции профиля:
сообщение 2.10.2010, 23:17
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 18.10.2009
Пользователь №: 1160

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(kwisp @ 2.10.2010, 10:06) *
Цитата(k0p4 @ 1.10.2010, 0:42) *
connect(this,SIGNAL(downLoad(QUrl*)),d,SLOT(connectItem(QUrl)));

в сигнале указатель на QUrl а в слоте QUrl.
Естественно это не сработает.

П.С.
и все же называй сигналы и слоты разными именами, а тов едь так запутаться не сложно.
Это я про downloadRequested(QNetworkRequest)


при
connect(this,SIGNAL(downLoad(QUrl*)),d,SLOT(connectItem(QUrl)));
компилятор выдаёт ошибку о том, что невозможно приведение типов QUrl* и QUrl. Это был отладочный варианткода, когда я думал, что неправильно написал слоты. В моём срр файле таких недочётов нет. Всё компилится. Поэтому вопрос я спрашиваю не "почему не работает код", а как правильно использовать. Как я писал выше, слот просто не выполняется.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 3.10.2010, 18:44
Сообщение #8


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


тогда больше кода покажи а то гадать можно долго.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
k0p4
  опции профиля:
сообщение 5.10.2010, 20:33
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 18.10.2009
Пользователь №: 1160

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(kwisp @ 3.10.2010, 18:44) *
тогда больше кода покажи а то гадать можно долго.



downloaditem.cpp

void downLoadItem::init(QNetworkRequest request)
{
    Manager = new QNetworkAccessManager;

    QNetworkReply *reply = Manager->get(request);    
  
    connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
    connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
               this, SLOT(slotError(QNetworkReply::NetworkError)));
    connect(reply, SIGNAL(finished()), this, SLOT(slotFinished()));    

    file.setFileName(getFileName(reply->url()));
    file.open(QIODevice::WriteOnly);
}


void downLoadItem::slotError(QNetworkReply::NetworkError)
{

}
void downLoadItem::slotFinished()
{
    QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
    file.close();
    reply->deleteLater();
}
void downLoadItem::slotReadyRead()
{
    QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
    file.write(reply->readAll());
}


downloaddialog.cpp

void downLoadDialog::connectItem(QNetworkRequest request)// этот слот не робит.
{
    item->init(request);

    QMessageBox msgBox;
    msgBox.setText("ROBIT");
    msgBox.exec();
}


webview.cpp

XronView::XronView(): QWebView()
{
    d = new downLoadDialog;

    this->page()->setForwardUnsupportedContent(true);

    connect(this->page(),SIGNAL(downloadRequested(QNetworkRequest)),
            d,SLOT(connectItem(QNetworkRequest)));

     d->show();

     this->load(QUrl("http://www.upload.com.ua"));
 }

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 5.10.2010, 20:48
Сообщение #10


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


void downLoadDialog::connectItem(const QNetworkRequest &request)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
k0p4
  опции профиля:
сообщение 5.10.2010, 21:23
Сообщение #11


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 18.10.2009
Пользователь №: 1160

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(igor_bogomolov @ 5.10.2010, 20:48) *
void downLoadDialog::connectItem(const QNetworkRequest &request)

исправил. Проблема осталась.Так же отладочный слот

 connect(this->page(),SIGNAL(downloadRequested(QNetworkRequest)),
            this,SLOT(down(QNetworkRequest)));

void XronView::down(QNetworkRequest &req)
{

    QMessageBox msgBox;
    msgBox.setText("ROBIT");
    msgBox.exec();

}


не робит. Значит не проходит сигнал...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 5.10.2010, 21:36
Сообщение #12


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


const опять пропустил
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
k0p4
  опции профиля:
сообщение 5.10.2010, 21:51
Сообщение #13


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 18.10.2009
Пользователь №: 1160

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(igor_bogomolov @ 5.10.2010, 21:36) *
const опять пропустил


Вы имеете ввиду
    connect(this->page(),SIGNAL(downloadRequested(const QNetworkRequest &)),
            this,SLOT(down(const QNetworkRequest &)));
 
void XronView::down(const QNetworkRequest & req)
{

    QMessageBox msgBox;
    msgBox.setText("ROBIT");
    msgBox.exec();

}

? Так тоже не реагирует. Если можно подробней обьясните.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 5.10.2010, 22:20
Сообщение #14


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Я имел в виду функцию down, в connect можно было ничего не менять (оба варианта правильны).
Почему у тебя не работает не знаю. Посмотри вот этот пример (ссылка), там, на сколько я понимаю, делается примерно то же самое, что пытаешься сделать ты
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 6.10.2010, 9:30
Сообщение #15


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


k0p4,
если не разобрался - заголовочные файлы давай тоже сюда выкладывай.
получив в
void downLoadDialog::connectItem(const QNetworkRequest& request)
request
ты не сможешь вызвать в ней
init(request)
т.к. фактически-передаваемый аргумент константный.

из ассистената
Цитата
void QWebPage::downloadRequested ( const QNetworkRequest & request ) [signal]
This signal is emitted when the user decides to download a link. The url of the link as well as additional meta-information is contained in request.
See also unsupportedContent().

не оч.силен в английском "download a link" означает ли это что при простой загрузке странички он будет вызываться?

как на счет unsupportedContent()? может срабатывает он?
как на счет других сигналов
Цитата
void loadFinished ( bool ok )
void loadProgress ( int progress )
void loadStarted ()


П.С.
Manager = new QNetworkAccessManager;
а где освобождаешь память?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
k0p4
  опции профиля:
сообщение 9.10.2010, 16:05
Сообщение #16


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 18.10.2009
Пользователь №: 1160

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
void downLoadDialog::connectItem(const QNetworkRequest& request)
request
ты не сможешь вызвать в ней
init(request)
т.к. фактически-передаваемый аргумент константный.

Не понял.


Цитата
не оч.силен в английском "download a link" означает ли это что при простой загрузке странички он будет вызываться?

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

Цитата
как на счет unsupportedContent()? может срабатывает он?

выставил с самого начала.

this->page()->setForwardUnsupportedContent(true);


Цитата
Manager = new QNetworkAccessManager;
а где освобождаешь память?

в downloaditem.h

  QNetworkAccessManager *Manager;



Вот весь код.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 9.10.2010, 17:11
Сообщение #17


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(k0p4 @ 9.10.2010, 19:05) *
в downloaditem.h

QNetworkAccessManager *Manager;

это объявление указателя, а не освобождение памяти ) Сделай в деструкторе класса
delete Manager;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 9.10.2010, 23:18
Сообщение #18


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Алексей1153 @ 9.10.2010, 18:11) *
это объявление указателя, а не освобождение памяти ) Сделай в деструкторе класса
delete Manager;

или назначь хозяина обЪекту менеджера

k0p4
ты точно кликаешь по ссылкам и слот down не вызывается?
может уже поздно, но не могу найти что в коде не так....
попробуй поэксперементируй с другими сигналами....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
k0p4
  опции профиля:
сообщение 10.10.2010, 1:36
Сообщение #19


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 18.10.2009
Пользователь №: 1160

Спасибо сказали: 0 раз(а)




Репутация:   0  


Решил пол проблемы. Сигнал посылаеться, когда пользователь вконтекстном меню кликает save link... Но. На, к примеру, большинстве обменниках установлены кнопочки, и ссылки не прямые (должен быть редирект, к примеру http://gameinside.ua/getfile.php?area=demos&id=7782 - ссылка возвращаемая copy link). Собственно мэнэджер качает файл download.php. Отсуда вопрос, как поймать редирект?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 10.10.2010, 12:43
Сообщение #20


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(kwisp @ 6.10.2010, 10:30) *
не оч.силен в английском "download a link" означает ли это что при простой загрузке странички он будет вызываться?
Цитата(k0p4 @ 10.10.2010, 2:36) *
Сигнал посылаеться, когда пользователь вконтекстном меню кликает save link...

кхммм...
что и требовалось доказать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 14.7.2025, 10:29