简体   繁体   English

Qt的新信号/插槽语法有问题-连接到简单功能

[英]Trouble with Qt's new signal/slot syntax - connecting to a simple function

As described here: , you can connect a signal to a simple function, like this: 如此处所述 ,您可以将信号连接到简单的函数,如下所示:

connect(
    sender, &Sender::valueChanged,
    someFunction
);

Here is my program: 这是我的程序:

#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>



void handleReply(QNetworkReply *reply)
{
    QString replyStr = reply->readAll();
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QNetworkAccessManager manager;
    connect(&manager, &QNetworkAccessManager::finished(QNetworkReply*), handleReply(QNetworkReply*));

    return a.exec();
}

However I get a few errors: 但是我得到一些错误:

main.cpp:18: error: call to non-static member function without an object argument
    connect(&manager, &QNetworkAccessManager::finished(QNetworkReply*), handleReply(QNetworkReply*));
                       ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~

main.cpp:18: error: 'QNetworkReply' does not refer to a value
    connect(&manager, &QNetworkAccessManager::finished(QNetworkReply*), handleReply(QNetworkReply*));
                                                       ^
main.cpp:18: error: expected expression
    connect(&manager, &QNetworkAccessManager::finished(QNetworkReply*), handleReply(QNetworkReply*));
                                                                     ^

main.cpp:18: error: 'QNetworkReply' does not refer to a value
    connect(&manager, &QNetworkAccessManager::finished(QNetworkReply*), handleReply(QNetworkReply*));
                                                                                    ^
/usr/include/x86_64-linux-gnu/qt5/QtNetwork/qnetworkreply.h:62: declared here
class Q_NETWORK_EXPORT QNetworkReply: public QIODevice

main.cpp:18: error: expected expression
    connect(&manager, &QNetworkAccessManager::finished(QNetworkReply*), handleReply(QNetworkReply*));
                                                                                                  ^
                       ^

I would appreciate any help. 我将不胜感激任何帮助。 Thank you. 谢谢。

When you use the new connection syntax it is not necessary to indicate the type of arguments, so just use: 使用新的连接语法时,不必指出参数的类型,因此只需使用:

#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>

#include <QDebug>

static void handleReply(QNetworkReply *reply)
{
    QString replyStr = reply->readAll();
    // do stuff
    qDebug()<< replyStr;
    reply->deleteLater();
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QNetworkAccessManager manager;
    QObject::connect(&manager, &QNetworkAccessManager::finished, &handleReply);
    manager.get(QNetworkRequest(QUrl("https://www.google.com")));

    return a.exec();
}

Note: You should only use connect(...) if you are inside a class that inherits from QObject , in the case of main you should use QObject::connect(...) 注意:如果您在从QObject继承的类中,则仅应使用connect(...)对于main而言,应使用QObject::connect(...)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM