【问题标题】:QT client doesn't download file when action is placed on button将操作放在按钮上时,QT客户端不下载文件
【发布时间】:2017-06-03 16:36:45
【问题描述】:

main.cpp中的代码

Client c;
c.start("ip-address", port, "final folder/file");

它工作正常,客户端下载我需要的文件。

但是,如果我在 mainwindow.cpp 按钮单击操作中放置相同的代码

void MainWindow::on_btn_connect_clicked()
{
    Client c;
    c.start("ip-address", port, "final folder/file");
}

它不起作用。这是为什么?我是 Qt 和网络编码的新手。一些源代码

void Client::start(QString address, qint16 port, QString file)
{
    qDebug() << "client started";
    QHostAddress addr(address);
    filename = file;
    client->connectToHost(addr, port);
    qDebug() << client->socketDescriptor();
}

我有 readyRead() 但程序没有到达那里。

Client::Client(QObject *parent) :
    QObject(parent)
{
    client = new QTcpSocket(this);
    client->abort();
    connect(client, SIGNAL(readyRead()), this, SLOT(ReadData()));
    connect(client, SIGNAL(disconnected()), this, SLOT(Completed()));
}

【问题讨论】:

  • 显示mainwindow.cpp 中的代码 - on_button_connect_clicked() 必须是一个插槽,并且必须连接到QPushButton::clicked(bool) 信号。看到你已经让on_button_connect_clicked() 没有参数,你可能没有将它连接到信号,或者没有建立连接,因为签名不匹配。

标签: c++ qt file server client


【解决方案1】:

您是否将按钮单击信号连接到 on_btn_connect 插槽?

【讨论】:

    【解决方案2】:

    当您像这样创建客户端时:

    void MainWindow::on_btn_connect_clicked()
    {
        Client c;
        c.start("ip-address", port, "final folder/file");
    }
    

    客户端对象被创建,开始被调用,然后它立即被销毁,一个执行离开on_btn_conenct_clicked()函数。除非“开始”功能在您离开时完全完成您想要它做的任何事情,否则这永远不会起作用,您发布的代码似乎并非如此。

    为此,您必须使客户端成为 MainWindow 类的成员,以便在调用插槽后它仍然存在。另一种选择是使其成为一个指针,在 on_btn_connect_clicked() 插槽中创建它,然后将所有工作完成后发出的任何信号连接到它自己的 deleteLater 插槽。像这样:

    void MainWindow::on_btn_connect_clicked()
    {
        Client* c = new Client(this);
        connect(c, &Client::downloadComplete, c, &Client::deleteLater);
        c->start("ip-address", port, "final folder/file");
    }
    

    downloadComplete 信号是您必须确保在您尝试完成的操作完成时发出自己的信号,否则您将发生内存泄漏并且客户端对象在整个 MainWindow 被删除之前不会被删除.

    【讨论】:

      猜你喜欢
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 2013-06-26
      相关资源
      最近更新 更多