【问题标题】:Use signals and slots in console application?在控制台应用程序中使用信号和插槽?
【发布时间】:2013-10-31 06:32:24
【问题描述】:

在我的项目中,我需要从服务器下载一个 1.5MB 的文件。我能够在我的 GUI 应用程序中实现这一点,如下所示:

QNetworkAccessManager* m_NetworkMngr = new QNetworkAccessManager(this);
    QNetworkReply *reply = m_NetworkMngr->get(QNetworkRequest(QUrl("someurl.com")));
    QEventLoop loop;
    connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
    loop.exec();
    QUrl aUrl("someurl.com");
    QFileInfo fileInfo=aUrl.path();

    QFile file(aPathInClient+"\\"+fileInfo.fileName());//aPathInClient is predefined
    file.open(QIODevice::WriteOnly);
    file.write(reply->readAll());
    delete reply;

我收到以下错误:

'connect' 函数不接受四个参数。

如何修改信号和插槽以在我的控制台应用程序中工作?

【问题讨论】:

  • 您知道您也可以在非 GUI(即控制台)应用程序中使用 Qt 吗?配有信号槽和所有东西。
  • -_- 真的吗?哇,我不觉得自己很愚蠢。那你知道为什么我说太多参数会出错吗?这是指“连接”
  • @mc360pro 因为您向“连接”发送了太多参数?无论如何,Joachim 是对的,您可以将 Qt 与控制台应用程序一起使用,我已经做到了,并且可以正常工作。
  • 是不是和 gui 里的不一样?我目前有 4 个参数。
  • @mc360pro 你为什么不编辑你的问题、标题和所有内容,来询问那个错误呢?描述它,围绕错误发布 3-4 行代码,我们会帮助你。您目前提出的问题毫无意义,它建立在错误的假设之上。

标签: c++ qt console-application signals-slots


【解决方案1】:

我的猜测是您的代码在建立信号/插槽连接方面是正确的,但是编译器似乎因为 connect() 函数名称而感到困惑并且无法正确解析它:是否是 QObject::connect() 至少需要4 个参数,或者是另一个同名但签名不同的函数。我建议尝试明确告诉编译器使用哪个函数,即:

QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    相关资源
    最近更新 更多