Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Zilibobas от Декабрь 12, 2014, 13:33



Название: Не понимаю как описать слот
Отправлено: Zilibobas от Декабрь 12, 2014, 13:33
Код:
void MainWindow::UpdateProgram()
{
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(UpdateReply(QNetworkReply*)));
    manager->get(QNetworkRequest(QUrl(appUpdateUrl + "/" + appUpdateVersionFileName)));

    QTimer::singleShot(1000*10*1, this, SLOT(UpdateProgram()));
}

Есть такой код, пытаюсь описать слот UpdateReply(QNetworkReply*)

Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void UpdateProgram();
    void UpdateReply(QNetworkReply *reply);

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

Код:
void MainWindow::UpdateReply(QNetworkReply *reply)
{

}

Ругается на заголовочный файл:

D:\Dropbox\work\Qt\CryptoRegistratorClient\CryptoRegistratorClient\mainwindow.h:20: ошибка: C2061: синтаксическая ошибка: идентификатор "QNetworkReply"

Что то вообще? Как это? Веть в примере (http://doc.qt.io/qt-5/qnetworkaccessmanager.html) четко сказано:
When the replyFinished slot above is called, the parameter it takes is the QNetworkReply object containing the downloaded data as well as meta-data (headers, etc.).
Тоесть:
Когда слот replyFinished будет вызван, то принимаемый им параметр будет объект QNetworkReply, содержащий скачанные данные и метаданные (заголовки и т.д.).

Я так и указываю что будет принят этот указатель на этот обьект. Но выдает это.


Название: Re: Не понимаю как описать слот
Отправлено: _OLEGator_ от Декабрь 12, 2014, 14:34
Наверное, надо дать знать компилятору, откуда брать QNetworkReply в mainwindow.h.
Либо подключи QNetworkReply либо добавь предварительное объявление QNetworkReply.


Название: Re: Не понимаю как описать слот
Отправлено: QuJu от Май 20, 2017, 19:39
Похожий вопрос.

Создал свой класс listView наследник QAbstractItemView. Соединяю нажатие кнопки и обновление вьюпорта listView.

по старому соединял так:

connect(mybutton,SIGNAL(clicked()),this->viewport(),SLOT(update())); (this это listView)

А по новому с указателями не получается сформулировать:

connect(mybutton,&QPushButton::clicked, ????????)

получается цепочка listView->QAbstractItemView->QAbstractScrollArea->QWidget::update


Название: Re: Не понимаю как описать слот
Отправлено: Apktyc от Май 21, 2017, 00:53
Разве не
Код:
connect(mybutton, &QPushButton::clicked, this->viewport(), QWidget::update);
и старый синтаксис в новый можно переделать через меню рефакторинга.


Название: Re: Не понимаю как описать слот
Отправлено: QuJu от Май 24, 2017, 00:13
Нет(
cannot determine which instance of overloaded function "QWidget::update" is intended

Разве не
Код:
connect(mybutton, &QPushButton::clicked, this->viewport(), QWidget::update);
и старый синтаксис в новый можно переделать через меню рефакторинга.
Про рефакторинг не знал,спасибо.
Но именно на этой функции в меню рефакторинга не появляется предложение поменять на стиль Qt5 connect


Название: Re: Не понимаю как описать слот
Отправлено: Apktyc от Май 24, 2017, 00:37
А откуда перегрузка появилась update-то?
Сигналы и слоты перегружать не советуют (поэтому рефакторинг и не появляется), я не пробовал со слотами, но может прокатит, по аналогии с сигналами

Код:
connect(mybutton, &QPushButton::clicked, this->viewport(), static_cast<void (QWidget::*)()>&(QWidget::update));
или для Qt 5.7+
Код:
connect(mybutton, &QPushButton::clicked, this->viewport(), QOverload<>::of(&QWidget::update));

З.Ы. А может можно дергать update самого ListView?


Название: Re: Не понимаю как описать слот
Отправлено: QuJu от Май 24, 2017, 01:43
Код:
connect(mybutton, &QPushButton::clicked, this->viewport(), QOverload<>::of(&QWidget::update));
З.Ы. А может можно дергать update самого ListView?

В таком виде срабатывает.Спасибо!
Про перегруз,не знаю почему. Попробую дергать сам ListView. с update ListView тоже самое пишет

ps/ А moc файлы тоже должны создаватся если используется новый синтаксис?