Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. How to show QImage from http url?
QtWS25 Last Chance

How to show QImage from http url?

Scheduled Pinned Locked Moved QML and Qt Quick
27 Posts 4 Posters 17.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    J Offline
    jkosonen
    wrote on last edited by
    #3

    [quote author="Denis Kormalev" date="1311023033"]You can also use custom "QDeclarativeNetworkAccessManagerFactory":http://doc.qt.nokia.com/4.7/qdeclarativenetworkaccessmanagerfactory.html to cache images with cache-enabled QNAM.[/quote]

    That sounds even trickier task

    1 Reply Last reply
    0
    • C Offline
      C Offline
      Chuck Gao
      wrote on last edited by
      #4

      Hi jkosonen, you want to show your images with QML?

      Chuck

      1 Reply Last reply
      0
      • J Offline
        J Offline
        jkosonen
        wrote on last edited by
        #5

        [quote author="Chuck Gao" date="1311058507"]Hi jkosonen, you want to show your images with QML?[/quote]

        Yes :)

        1 Reply Last reply
        0
        • C Offline
          C Offline
          Chuck Gao
          wrote on last edited by
          #6

          If so, i think the key point is the file path(local or internet). QML Image element's source can be a url, so you just need to get the file path. The element itself will take care of the http part.

          Chuck

          1 Reply Last reply
          0
          • J Offline
            J Offline
            jkosonen
            wrote on last edited by
            #7

            [quote author="Chuck Gao" date="1311063146"]If so, i think the key point is the file path(local or internet). QML Image element's source can be a url, so you just need to get the file path. The element itself will take care of the http part.[/quote]

            Yes, I know. but I don't want to download it from the internet everytime, but make a local copy and then take it from there if exists.

            1 Reply Last reply
            0
            • C Offline
              C Offline
              Chuck Gao
              wrote on last edited by
              #8

              You want cache the images yourself ? I mean, store them into the cache and get them from the cache. I'm not sure if the QML Image element use caching when load url image. But you can try QNetworkDiskCache. I found this in the document: "Images are cached and shared internally, so if several Image elements have the same source, only one copy of the image will be loaded". Let's look into the source code. :-)

              Chuck

              1 Reply Last reply
              0
              • J Offline
                J Offline
                jkosonen
                wrote on last edited by
                #9

                Yes, I would like to cache by myself :) I don't think that the QML caches those automatically since it always takes so long to get the images to the screen.

                Maybe need to investigate that QNetworkDiscCache, but I wouldn't mind if someone could give me a solution to problem I had in the main question :)

                1 Reply Last reply
                0
                • C Offline
                  C Offline
                  Chuck Gao
                  wrote on last edited by
                  #10

                  I have a look at the source code, and QML will cache those images for you, with
                  @
                  QDeclarativeImageBase::load()
                  {
                  ...
                  QDeclarativePixmap::load(QDeclarativeEngine *engine, const QUrl &url;, const QSize &requestSize;, bool async)
                  {
                  if (d) { d->release(); d = 0; }

                  QDeclarativePixmapKey key = { &url;, &requestSize; };
                  QDeclarativePixmapStore *store = pixmapStore();
                  
                  QHash<QDeclarativePixmapKey, QDeclarativePixmapData *>::Iterator iter = store->m_cache.find(key);
                  
                  if (iter == store->m_cache.end()) {
                      if (async) {
                          // pixmaps can only be loaded synchronously
                          if (url.scheme() == QLatin1String("image") 
                                  && QDeclarativeEnginePrivate::get(engine)->getImageProviderType(url) == QDeclarativeImageProvider::Pixmap) {
                              async = false;
                          }
                      }
                  
                      if (!async) {
                          bool ok = false;
                          d = createPixmapDataSync(engine, url, requestSize, &ok;);
                          if (ok) {
                              d->addToCache();
                              return;
                          }
                          if (d)  // loadable, but encountered error while loading
                              return;
                      } 
                  
                      if (!engine)
                          return;
                  
                      QDeclarativePixmapReader *reader = QDeclarativePixmapReader::instance(engine);
                  
                      d = new QDeclarativePixmapData(url, requestSize);
                      d->addToCache();
                  
                      d->reply = reader->getImage(d);
                  } else {
                      d = *iter;
                      d->addref();
                  }
                  

                  }

                  .....
                  }
                  @

                  Chuck

                  1 Reply Last reply
                  0
                  • J Offline
                    J Offline
                    jkosonen
                    wrote on last edited by
                    #11

                    Then it takes awful lot of time to show the image if it already comes from cache...

                    1 Reply Last reply
                    0
                    • D Offline
                      D Offline
                      DenisKormalev
                      wrote on last edited by
                      #12

                      [quote author="jkosonen" date="1311064731"]Yes, I would like to cache by myself :) I don't think that the QML caches those automatically since it always takes so long to get the images to the screen.

                      Maybe need to investigate that QNetworkDiscCache, but I wouldn't mind if someone could give me a solution to problem I had in the main question :)[/quote]

                      QNetworkDiskCache is the same way I've suggested. It is really not hard (maybe a 5 or 10 lines of code)

                      1 Reply Last reply
                      0
                      • J Offline
                        J Offline
                        jkosonen
                        wrote on last edited by
                        #13

                        [quote author="Denis Kormalev" date="1311065955"][quote author="jkosonen" date="1311064731"]Yes, I would like to cache by myself :) I don't think that the QML caches those automatically since it always takes so long to get the images to the screen.

                        Maybe need to investigate that QNetworkDiscCache, but I wouldn't mind if someone could give me a solution to problem I had in the main question :)[/quote]

                        QNetworkDiskCache is the same way I've suggested. It is really not hard (maybe a 5 or 10 lines of code)[/quote]

                        Can you point me to any site with example, with QML?

                        1 Reply Last reply
                        0
                        • D Offline
                          D Offline
                          DenisKormalev
                          wrote on last edited by
                          #14

                          "example about QDeclarativeNetworkAccessManagerFactory":http://doc.qt.nokia.com/4.7/declarative-cppextensions-networkaccessmanagerfactory.html
                          "QNetworkDiskCache":http://doc.qt.nokia.com/4.7/qnetworkdiskcache.html (there is an example of how to use it with QNAM)

                          1 Reply Last reply
                          0
                          • J Offline
                            J Offline
                            jkosonen
                            wrote on last edited by
                            #15

                            [quote author="Denis Kormalev" date="1311066630"]"example about QDeclarativeNetworkAccessManagerFactory":http://doc.qt.nokia.com/4.7/declarative-cppextensions-networkaccessmanagerfactory.html
                            "QNetworkDiskCache":http://doc.qt.nokia.com/4.7/qnetworkdiskcache.html (there is an example of how to use it with QNAM)[/quote]

                            Thanks, will try that!

                            but there is this:

                            When sending requests, to control the preference of when to use the cache and when to use the network, consider the following:

                            @ // do a normal request (preferred from network, as this is the default)
                            QNetworkRequest request(QUrl(QString("http://qt.nokia.com")));
                            manager->get(request);

                            // do a request preferred from cache
                            QNetworkRequest request2(QUrl(QString("http://qt.nokia.com")));
                            request2.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
                            manager->get(request2);@

                            How do I say in QML to prfer cache?

                            1 Reply Last reply
                            0
                            • D Offline
                              D Offline
                              DenisKormalev
                              wrote on last edited by
                              #16

                              jkosonen, it will prefer a cache in most part of cases (if we are talking about images)

                              1 Reply Last reply
                              0
                              • J Offline
                                J Offline
                                jkosonen
                                wrote on last edited by
                                #17

                                [quote author="Denis Kormalev" date="1311067186"]jkosonen, it will prefer a cache in most part of cases (if we are talking about images)[/quote]

                                OK, but how to say then not to use cache, or clear cache?
                                Cache isn't always preferred, would be nice to know when it is used and when it's not.

                                1 Reply Last reply
                                0
                                • D Offline
                                  D Offline
                                  DenisKormalev
                                  wrote on last edited by
                                  #18

                                  jkosonen, clearing cache is possbile with simple removing all contents of cache dir. I'm not aware of any other ways.

                                  1 Reply Last reply
                                  0
                                  • C Offline
                                    C Offline
                                    Chuck Gao
                                    wrote on last edited by
                                    #19

                                    You can try Qt 4.8, it has a better image caching for QML. Hope it will work for you :D

                                    Chuck

                                    1 Reply Last reply
                                    0
                                    • J Offline
                                      J Offline
                                      jkosonen
                                      wrote on last edited by
                                      #20

                                      Can anyone help with the question in the first post, how that could be done?

                                      1 Reply Last reply
                                      0
                                      • G Offline
                                        G Offline
                                        goetz
                                        wrote on last edited by
                                        #21

                                        [quote author="jkosonen" date="1312700928"]Can anyone help with the question in the first post, how that could be done?[/quote]

                                        By using [[Doc:QNetworkAccessManager]] - there are numerous examples out there (even in this forums :-) ) that show you the basic path.

                                        http://www.catb.org/~esr/faqs/smart-questions.html

                                        1 Reply Last reply
                                        0
                                        • J Offline
                                          J Offline
                                          jkosonen
                                          wrote on last edited by
                                          #22

                                          Don't think so that there is... and what a useless post..

                                          [quote author="Volker" date="1312717450"]
                                          [quote author="jkosonen" date="1312700928"]Can anyone help with the question in the first post, how that could be done?[/quote]

                                          By using [[Doc:QNetworkAccessManager]] - there are numerous examples out there (even in this forums :-) ) that show you the basic path.[/quote]

                                          1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved