QNetworkReply读取数据时,QMainWindow关闭按钮变为无效

时间:2018-08-13 07:21:56

标签: qt qmainwindow qnetworkreply

这是我的代码的一些想法,它可以成功执行。我只是无法在开始执行read语句时使用关闭按钮。

在main()内部


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow mainWindow;

    mainWindow.show();
    return app.exec();

}

这是我的构造函数:一个主窗口和一个按钮,单击后将调用执行

在MainWindow.cpp内部:


MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) //this creates a window that has a download button
{
    setWindowTitle("File Downloader");
    QWidget* central = new QWidget(this); 
    QVBoxLayout *lay = new QVBoxLayout(central);

    button1 = new QPushButton("Download", this);
    connect(button1, SIGNAL (clicked()),this,SLOT( execute()));         
    lay->addWidget(button1);
    manager = new QNetworkAccessManager(this);
}

此函数设置与php文件的连接,然后调用sendFinished

void MainWindow::execute()   //PHP file link here
{
 QUrl url"/patofmyphp");
 reply = manager->post(request, data); //data is some string
 connect(reply, SIGNAL (finished()),this,SLOT( sendFinished()));
}

此函数从php文件中分块读取数据

void MainWindow::sendFinished()  //this gets called successfully
{
      while(copied < size)    //copied = 0, size = 10000; 
      {
          const QByteArray data = reply->read(tocopy);
          file.write(data);
          copied += data.size();
      }
}

整个程序运行成功。但是当我想在程序成功执行之前使用QMainWindow的closebutton中止我的答复时。但是reply->read一经执行,似乎关闭按钮停止工作。我该怎么办?

1 个答案:

答案 0 :(得分:0)

看起来我只是通过在while循环中使用这一行来解决了我的问题。

QApplication :: processEvents(); if(close == true){closeProgram(); }