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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не понимаю как описать слот  (Прочитано 4887 раз)
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, содержащий скачанные данные и метаданные (заголовки и т.д.).

Я так и указываю что будет принят этот указатель на этот обьект. Но выдает это.
« Последнее редактирование: Декабрь 12, 2014, 13:35 от Zilibobas » Записан
_OLEGator_
Гость
« Ответ #1 : Декабрь 12, 2014, 14:34 »

Наверное, надо дать знать компилятору, откуда брать QNetworkReply в mainwindow.h.
Либо подключи QNetworkReply либо добавь предварительное объявление QNetworkReply.
Записан
QuJu
Гость
« Ответ #2 : Май 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
« Последнее редактирование: Май 20, 2017, 19:49 от QuJu » Записан
Apktyc
Самовар
**
Offline Offline

Сообщений: 133


Просмотр профиля
« Ответ #3 : Май 21, 2017, 00:53 »

Разве не
Код:
connect(mybutton, &QPushButton::clicked, this->viewport(), QWidget::update);
и старый синтаксис в новый можно переделать через меню рефакторинга.
Записан
QuJu
Гость
« Ответ #4 : Май 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
« Последнее редактирование: Май 24, 2017, 00:26 от QuJu » Записан
Apktyc
Самовар
**
Offline Offline

Сообщений: 133


Просмотр профиля
« Ответ #5 : Май 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?
« Последнее редактирование: Май 24, 2017, 00:39 от Apktyc » Записан
QuJu
Гость
« Ответ #6 : Май 24, 2017, 01:43 »

Код:
connect(mybutton, &QPushButton::clicked, this->viewport(), QOverload<>::of(&QWidget::update));
З.Ы. А может можно дергать update самого ListView?

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

ps/ А moc файлы тоже должны создаватся если используется новый синтаксис?
« Последнее редактирование: Май 24, 2017, 02:04 от QuJu » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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