QMainWindow 关闭按钮在 QNetworkReply 读取数据时变为非活动状态
QMainWindow close button gets inactive while QNetworkReply is reading data
这是我的 code.It 成功执行的一些想法。我只是无法在它开始执行读取语句的那一刻使用关闭按钮。!
在 main() 内部:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}
这是我的构造函数:一个主要 window 和一个在单击时调用执行的按钮
里面 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 的关闭按钮中止我的回复时。但是当它 reply->read
被执行时,关闭按钮似乎停止工作了。我该怎么办?
看来我只是在 while 循环中使用这一行就解决了我的问题。
QApplication::processEvents(); if(close == true) { closeProgram(); }
这是我的 code.It 成功执行的一些想法。我只是无法在它开始执行读取语句的那一刻使用关闭按钮。!
在 main() 内部:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}
这是我的构造函数:一个主要 window 和一个在单击时调用执行的按钮
里面 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 的关闭按钮中止我的回复时。但是当它 reply->read
被执行时,关闭按钮似乎停止工作了。我该怎么办?
看来我只是在 while 循环中使用这一行就解决了我的问题。
QApplication::processEvents(); if(close == true) { closeProgram(); }