void CollaborativeDrawingWidget::drawingArrived(QString sessionName, QByteArray picData, bool isInitialState) { // this slot will be invoked when the user joins a new session and the server // sends the current drawing state for this session QPicture pic; qWarning() << "Session state data of size : " << picData.size() << "from session" << sessionName; if(isInitialState) { // set the session name m_currentSession = sessionName; // clear up any old data getDrawingData()->clear(); // the widget should be enabled now setEnabled(true); } pic.setData(picData.constData(), picData.size()); // commit the new data BaseDrawingWidget::commitDrawing(pic); }
QPicture QgsSvgCache::svgAsPicture( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth, double widthScaleFactor, bool forceVectorOutput, double fixedAspectRatio ) { QMutexLocker locker( &mMutex ); QgsSvgCacheEntry *currentEntry = cacheEntry( path, size, fill, stroke, strokeWidth, widthScaleFactor, fixedAspectRatio ); //if current entry picture is 0: cache picture for entry //update stats for memory usage if ( !currentEntry->picture ) { cachePicture( currentEntry, forceVectorOutput ); trimToMaximumSize(); } QPicture p; // For some reason p.detach() doesn't seem to always work as intended, at // least with QT 5.5 on Ubuntu 16.04 // Serialization/deserialization is a safe way to be ensured we don't // share a copy. p.setData( currentEntry->picture->data(), currentEntry->picture->size() ); return p; }