使用 QEventLoop 如何控制内存?

mysunshinexia 2014-12-11 12:51:50
需求:一个网络地址下有一张图片每一秒变动一次(例如:http://192.168.0.2/pull.bmp),需要读取这张图片 并刷新显示它!
我实现了基本的功能,但是内存却一直增长,没办法控制!有没有什么方法控制它内存不要增长?或者重复利用也可以!求大神帮忙看下!
...全文
813 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaozhiyong110 2015-09-10
  • 打赏
  • 举报
回复
引用 4 楼 oLuoJinFanHua12 的回复:
reply->deleteLater();
+1
lilong(DLC) 2015-09-09
  • 打赏
  • 举报
回复
reply->deleteLater();
mysunshinexia 2014-12-11
  • 打赏
  • 举报
回复
你在UI界面随便拖三个label ,不用改名字!你直接复制代码就可以!
mysunshinexia 2014-12-11
  • 打赏
  • 举报
回复
MainWindow .h ---------------------------------------------------------------------- #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QMovie> #include <QTimer> #include <QPixmap> #include <QNetworkAccessManager> #include <QPixmap> #include <QPixmap> #include <QNetworkReply> #include <QNetworkRequest> #include <QByteArray> #include <QUrl> #include <QTextEdit> #include <QEventLoop> #include <QLabel> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_label_linkActivated(const QString &link); void update(); void on_textBrowser_destroyed(); private: Ui::MainWindow *ui; QMovie *movie; QTimer *timer; int i; QUrl *url ; QNetworkAccessManager manager; QEventLoop loop; QNetworkReply *reply; }; #endif // MAINWINDOW_H -/*-------------------------------------------/*-------------------- mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); movie= new QMovie(); ui->label->setMovie(movie); //ui->label_3->setMovie(movie); i=0; timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(update())); timer->start(45); //1s执行一次update() } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_label_linkActivated(const QString &link) { } void MainWindow::update() { i=i+1; if(i>5) i=1; switch(i) { //case 1:movie->setFileName("../1");movie->start();break; //case 2:movie->setFileName("../2");movie->start();break; //case 3:movie->setFileName("../3");movie->start();break; //case 4:movie->setFileName("../4");movie->start();break; //case 5:movie->setFileName("../5");movie->start();break; default:break; } /*<img src=\"http://192.168.3.3/pull.bmp\"/> */ QUrl url("http://img01.cztv.com/201412/05/8c0fb86122a38830b534fb8e4238d169.jpg"); //QUrl url("http://192.168.3.3/pull.bmp"); // qDebug() << "Reading picture form " << url; reply = manager.get(QNetworkRequest(url)); //请求结束并下载完成后,退出子事件循环 QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); //开启子事件循环 loop.exec(); QByteArray jpegData = reply->readAll(); QPixmap pixmap; pixmap.loadFromData(jpegData); ui->label_3->setPixmap(pixmap); // 你在QLabel显示图片 ui->label_3->resize (640,320 ); ui->label_2->setPixmap(pixmap); // 你在QLabel显示图片 ui->label_2->resize (640,320 ); ui->label_2->setStyleSheet("color:black"); //movie->start(); } void MainWindow::on_textBrowser_destroyed() { } -/*-------------------------------------------/*-------------------- main.cpp #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
mysunshinexia 2014-12-11
  • 打赏
  • 举报
回复
求大神!指导看一下!万分感激额!

16,816

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧