Kill all QPictureIO

Has been deprecated for a long time.

Change-Id: I4579e3c2997c649f0fa66b9cdbcf8e7fc6d661a5
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
bb10
Allan Sandfeld Jensen 2019-07-23 13:26:54 +02:00
parent 3eedb2fbd0
commit ae83398d82
8 changed files with 14 additions and 1222 deletions

View File

@ -80,82 +80,3 @@ int main()
painter.end(); // painting done
//! [1]
}
QPicture myPicture;
{
// FORMATS
//! [2]
const QStringList list = QPicture::inputFormatList();
for (const QString &string : list)
myProcessing(string);
//! [2]
}
{
// OUTPUT
//! [3]
const QStringList list = QPicture::outputFormatList();
for (const QString &string : list)
myProcessing(string);
//! [3]
}
{
// PIC READ
//! [4]
QPictureIO iio;
QPixmap pixmap;
iio.setFileName("vegeburger.pic");
if (iio.read()) { // OK
QPicture picture = iio.picture();
QPainter painter(&pixmap);
painter.drawPicture(0, 0, picture);
}
//! [4]
}
{
QPixmap pixmap;
// PIC WRITE
//! [5]
QPictureIO iio;
QPicture picture;
QPainter painter(&picture);
painter.drawPixmap(0, 0, pixmap);
iio.setPicture(picture);
iio.setFileName("vegeburger.pic");
iio.setFormat("PIC");
if (iio.write())
return true; // returned true if written successfully
//! [5]
}
}
// SVG READ
//! [6]
void readSVG(QPictureIO *picture)
{
// read the picture using the picture->ioDevice()
}
//! [6]
// SVG WRITE
//! [7]
void writeSVG(QPictureIO *picture)
{
// write the picture using the picture->ioDevice()
}
//! [7]
// USE SVG
void foo() {
//! [8]
// add the SVG picture handler
// ...
//! [8]
QPictureIO::defineIOHandler("SVG", 0, 0, readSVG, writeSVG);
// ...
}

View File

@ -14,7 +14,6 @@ HEADERS += \
image/qpaintengine_pic_p.h \
image/qpicture.h \
image/qpicture_p.h \
image/qpictureformatplugin.h \
image/qpixmap.h \
image/qpixmap_raster_p.h \
image/qpixmap_blitter_p.h \
@ -38,7 +37,6 @@ SOURCES += \
image/qimagewriter.cpp \
image/qpaintengine_pic.cpp \
image/qpicture.cpp \
image/qpictureformatplugin.cpp \
image/qpixmap.cpp \
image/qpixmapcache.cpp \
image/qplatformpixmap.cpp \

View File

@ -263,14 +263,14 @@ void QPicture::setData(const char* data, uint size)
\sa save()
*/
bool QPicture::load(const QString &fileName, const char *format)
bool QPicture::load(const QString &fileName)
{
QFile f(fileName);
if (!f.open(QIODevice::ReadOnly)) {
operator=(QPicture());
return false;
}
return load(&f, format);
return load(&f);
}
/*!
@ -279,21 +279,8 @@ bool QPicture::load(const QString &fileName, const char *format)
\a dev is the device to use for loading.
*/
bool QPicture::load(QIODevice *dev, const char *format)
bool QPicture::load(QIODevice *dev)
{
if(format) {
#ifndef QT_NO_PICTUREIO
QPictureIO io(dev, format);
if (io.read()) {
operator=(io.picture());
return true;
}
#endif
qWarning("QPicture::load: No such picture format: %s", format);
operator=(QPicture());
return false;
}
detach();
QByteArray a = dev->readAll();
@ -311,7 +298,7 @@ bool QPicture::load(QIODevice *dev, const char *format)
\sa load()
*/
bool QPicture::save(const QString &fileName, const char *format)
bool QPicture::save(const QString &fileName)
{
if (paintingActive()) {
qWarning("QPicture::save: still being painted on. "
@ -319,27 +306,10 @@ bool QPicture::save(const QString &fileName, const char *format)
return false;
}
if(format) {
#ifndef QT_NO_PICTUREIO
QPictureIO io(fileName, format);
bool result = io.write();
if (result) {
operator=(io.picture());
} else if (format)
#else
bool result = false;
#endif
{
qWarning("QPicture::save: No such picture format: %s", format);
}
return result;
}
QFile f(fileName);
if (!f.open(QIODevice::WriteOnly))
return false;
return save(&f, format);
return save(&f);
}
/*!
@ -348,7 +318,7 @@ bool QPicture::save(const QString &fileName, const char *format)
\a dev is the device to use for saving.
*/
bool QPicture::save(QIODevice *dev, const char *format)
bool QPicture::save(QIODevice *dev)
{
if (paintingActive()) {
qWarning("QPicture::save: still being painted on. "
@ -356,22 +326,6 @@ bool QPicture::save(QIODevice *dev, const char *format)
return false;
}
if(format) {
#ifndef QT_NO_PICTUREIO
QPictureIO io(dev, format);
bool result = io.write();
if (result) {
operator=(io.picture());
} else if (format)
#else
bool result = false;
#endif
{
qWarning("QPicture::save: No such picture format: %s", format);
}
return result;
}
dev->write(d_func()->pictb.buffer(), d_func()->pictb.buffer().size());
return true;
}
@ -1188,780 +1142,6 @@ QDataStream &operator>>(QDataStream &s, QPicture &r)
}
#endif // QT_NO_DATASTREAM
#ifndef QT_NO_PICTUREIO
QT_BEGIN_INCLUDE_NAMESPACE
#include "qregexp.h"
#include "qpictureformatplugin.h"
QT_END_INCLUDE_NAMESPACE
#if QT_DEPRECATED_SINCE(5, 10)
/*!
\obsolete
Returns a string that specifies the picture format of the file \a
fileName, or \nullptr if the file cannot be read or if the format
is not recognized.
\sa load(), save()
*/
const char* QPicture::pictureFormat(const QString &fileName)
{
const QByteArray format = QPictureIO::pictureFormat(fileName);
// This function returns a const char * from a QByteArray.
// Double check that the QByteArray is not detached, otherwise
// we would return a dangling pointer.
Q_ASSERT(!format.isDetached());
return format;
}
/*!
\obsolete
Returns a list of picture formats that are supported for picture
input.
\sa outputFormats(), inputFormatList(), QPictureIO
*/
QList<QByteArray> QPicture::inputFormats()
{
return QPictureIO::inputFormats();
}
static QStringList qToStringList(const QList<QByteArray> &arr)
{
QStringList list;
const int count = arr.count();
list.reserve(count);
for (int i = 0; i < count; ++i)
list.append(QString::fromLatin1(arr.at(i)));
return list;
}
/*!
\obsolete
Returns a list of picture formats that are supported for picture
input.
Note that if you want to iterate over the list, you should iterate
over a copy, e.g.
\snippet picture/picture.cpp 2
\sa outputFormatList(), inputFormats(), QPictureIO
*/
QStringList QPicture::inputFormatList()
{
return qToStringList(QPictureIO::inputFormats());
}
/*!
\obsolete
Returns a list of picture formats that are supported for picture
output.
Note that if you want to iterate over the list, you should iterate
over a copy, e.g.
\snippet picture/picture.cpp 3
\sa inputFormatList(), outputFormats(), QPictureIO
*/
QStringList QPicture::outputFormatList()
{
return qToStringList(QPictureIO::outputFormats());
}
/*!
\obsolete
Returns a list of picture formats that are supported for picture
output.
\sa inputFormats(), outputFormatList(), QPictureIO
*/
QList<QByteArray> QPicture::outputFormats()
{
return QPictureIO::outputFormats();
}
#endif // QT_DEPRECATED_SINCE(5, 10)
/*****************************************************************************
QPictureIO member functions
*****************************************************************************/
/*!
\obsolete
\class QPictureIO
\brief The QPictureIO class contains parameters for loading and
saving pictures.
\ingroup painting
\ingroup io
\inmodule QtGui
QPictureIO contains a QIODevice object that is used for picture data
I/O. The programmer can install new picture file formats in addition
to those that Qt provides.
You don't normally need to use this class; QPicture::load(),
QPicture::save().
\sa QPicture, QPixmap, QFile
*/
struct QPictureIOData
{
QPicture pi; // picture
int iostat; // IO status
QByteArray frmt; // picture format
QIODevice *iodev; // IO device
QString fname; // file name
QString descr; // picture description
const char *parameters;
int quality;
float gamma;
};
/*!
Constructs a QPictureIO object with all parameters set to zero.
*/
QPictureIO::QPictureIO()
{
init();
}
/*!
Constructs a QPictureIO object with the I/O device \a ioDevice and a
\a format tag.
*/
QPictureIO::QPictureIO(QIODevice *ioDevice, const char *format)
{
init();
d->iodev = ioDevice;
d->frmt = format;
}
/*!
Constructs a QPictureIO object with the file name \a fileName and a
\a format tag.
*/
QPictureIO::QPictureIO(const QString &fileName, const char* format)
{
init();
d->frmt = format;
d->fname = fileName;
}
/*!
Contains initialization common to all QPictureIO constructors.
*/
void QPictureIO::init()
{
d = new QPictureIOData();
d->parameters = 0;
d->quality = -1; // default quality of the current format
d->gamma=0.0f;
d->iostat = 0;
d->iodev = 0;
}
/*!
Destroys the object and all related data.
*/
QPictureIO::~QPictureIO()
{
if (d->parameters)
delete [] d->parameters;
delete d;
}
/*****************************************************************************
QPictureIO picture handler functions
*****************************************************************************/
class QPictureHandler
{
public:
QPictureHandler(const char *f, const char *h, const QByteArray& fl,
picture_io_handler r, picture_io_handler w);
QByteArray format; // picture format
QRegExp header; // picture header pattern
enum TMode { Untranslated=0, TranslateIn, TranslateInOut } text_mode;
picture_io_handler read_picture; // picture read function
picture_io_handler write_picture; // picture write function
bool obsolete; // support not "published"
};
QPictureHandler::QPictureHandler(const char *f, const char *h, const QByteArray& fl,
picture_io_handler r, picture_io_handler w)
: format(f), header(QString::fromLatin1(h))
{
text_mode = Untranslated;
if (fl.contains('t'))
text_mode = TranslateIn;
else if (fl.contains('T'))
text_mode = TranslateInOut;
obsolete = fl.contains('O');
read_picture = r;
write_picture = w;
}
typedef QList<QPictureHandler *> QPHList;
Q_GLOBAL_STATIC(QPHList, pictureHandlers)
void qt_init_picture_plugins()
{
typedef QMultiMap<int, QString> PluginKeyMap;
typedef PluginKeyMap::const_iterator PluginKeyMapConstIterator;
static QBasicMutex mutex;
QMutexLocker locker(&mutex);
static QFactoryLoader loader(QPictureFormatInterface_iid,
QStringLiteral("/pictureformats"));
const PluginKeyMap keyMap = loader.keyMap();
const PluginKeyMapConstIterator cend = keyMap.constEnd();
for (PluginKeyMapConstIterator it = keyMap.constBegin(); it != cend; ++it) {
if (QPictureFormatPlugin *format = qobject_cast<QPictureFormatPlugin*>(loader.instance(it.key())))
format->installIOHandler(it.value());
}
}
static void cleanup()
{
// make sure that picture handlers are delete before plugin manager
if (QPHList *list = pictureHandlers()) {
qDeleteAll(*list);
list->clear();
}
}
void qt_init_picture_handlers() // initialize picture handlers
{
static QBasicAtomicInt done = Q_BASIC_ATOMIC_INITIALIZER(0);
if (done.testAndSetRelaxed(0, 1)) {
qAddPostRoutine(cleanup);
}
}
static QPictureHandler *get_picture_handler(const char *format)
{ // get pointer to handler
qt_init_picture_handlers();
qt_init_picture_plugins();
if (QPHList *list = pictureHandlers()) {
for (int i = 0; i < list->size(); ++i) {
if (list->at(i)->format == format)
return list->at(i);
}
}
return 0; // no such handler
}
/*!
Defines a picture I/O handler for the picture format called \a
format, which is recognized using the regular
expression defined in \a header, read using \a readPicture and
written using \a writePicture.
\a flags is a string of single-character flags for this format.
The only flag defined currently is T (upper case), so the only
legal value for \a flags are "T" and the empty string. The "T"
flag means that the picture file is a text file, and Qt should treat
all newline conventions as equivalent. (XPM files and some PPM
files are text files for example.)
\a format is used to select a handler to write a QPicture; \a header
is used to select a handler to read an picture file.
If \a readPicture is \nullptr, the QPictureIO will not be able
to read pictures in \a format. If \a writePicture is \nullptr,
the QPictureIO will not be able to write pictures in \a format. If
both are null, the QPictureIO object is valid but useless.
Example:
\snippet picture/picture.cpp 6
\codeline
\snippet picture/picture.cpp 7
\codeline
\snippet picture/picture.cpp 8
Before the regular expression test, all the 0 bytes in the file header are
converted to 1 bytes. This is done because when Qt was ASCII-based, QRegExp
could not handle 0 bytes in strings.
The regexp is only applied on the first 14 bytes of the file.
(Note that if one handlerIO supports writing a format and another
supports reading it, Qt supports both reading and writing. If two
handlers support the same operation, Qt chooses one arbitrarily.)
*/
void QPictureIO::defineIOHandler(const char *format,
const char *header,
const char *flags,
picture_io_handler readPicture,
picture_io_handler writePicture)
{
qt_init_picture_handlers();
if (QPHList *list = pictureHandlers()) {
QPictureHandler *p;
p = new QPictureHandler(format, header, QByteArray(flags), readPicture, writePicture);
list->prepend(p);
}
}
/*****************************************************************************
QPictureIO normal member functions
*****************************************************************************/
/*!
Returns the picture currently set.
\sa setPicture()
*/
const QPicture &QPictureIO::picture() const { return d->pi; }
/*!
Returns the picture's IO status. A non-zero value indicates an
error, whereas 0 means that the IO operation was successful.
\sa setStatus()
*/
int QPictureIO::status() const { return d->iostat; }
/*!
Returns the picture format string or \nullptr if no format has been
explicitly set.
*/
const char *QPictureIO::format() const { return d->frmt; }
/*!
Returns the IO device currently set.
\sa setIODevice()
*/
QIODevice *QPictureIO::ioDevice() const { return d->iodev; }
/*!
Returns the file name currently set.
\sa setFileName()
*/
QString QPictureIO::fileName() const { return d->fname; }
/*!
Returns the picture description string.
\sa setDescription()
*/
QString QPictureIO::description() const { return d->descr; }
/*!
Sets the picture to \a picture.
\sa picture()
*/
void QPictureIO::setPicture(const QPicture &picture)
{
d->pi = picture;
}
/*!
Sets the picture IO status to \a status. A non-zero value indicates
an error, whereas 0 means that the IO operation was successful.
\sa status()
*/
void QPictureIO::setStatus(int status)
{
d->iostat = status;
}
/*!
Sets the picture format to \a format for the picture to be read or
written.
It is necessary to specify a format before writing an picture, but
it is not necessary to specify a format before reading an picture.
If no format has been set, Qt guesses the picture format before
reading it. If a format is set the picture will only be read if it
has that format.
\sa read(), write(), format()
*/
void QPictureIO::setFormat(const char *format)
{
d->frmt = format;
}
/*!
Sets the IO device to be used for reading or writing an picture.
Setting the IO device allows pictures to be read/written to any
block-oriented QIODevice.
If \a ioDevice is not null, this IO device will override file name
settings.
\sa setFileName()
*/
void QPictureIO::setIODevice(QIODevice *ioDevice)
{
d->iodev = ioDevice;
}
/*!
Sets the name of the file to read or write an picture from to \a
fileName.
\sa setIODevice()
*/
void QPictureIO::setFileName(const QString &fileName)
{
d->fname = fileName;
}
/*!
Returns the quality of the written picture, related to the
compression ratio.
\sa setQuality(), QPicture::save()
*/
int QPictureIO::quality() const
{
return d->quality;
}
/*!
Sets the quality of the written picture to \a q, related to the
compression ratio.
\a q must be in the range -1..100. Specify 0 to obtain small
compressed files, 100 for large uncompressed files. (-1 signifies
the default compression.)
\sa quality(), QPicture::save()
*/
void QPictureIO::setQuality(int q)
{
d->quality = q;
}
/*!
Returns the picture's parameters string.
\sa setParameters()
*/
const char *QPictureIO::parameters() const
{
return d->parameters;
}
/*!
Sets the picture's parameter string to \a parameters. This is for
picture handlers that require special parameters.
Although the current picture formats supported by Qt ignore the
parameters string, it may be used in future extensions or by
contributions (for example, JPEG).
\sa parameters()
*/
void QPictureIO::setParameters(const char *parameters)
{
if (d->parameters)
delete [] d->parameters;
d->parameters = qstrdup(parameters);
}
/*!
Sets the gamma value at which the picture will be viewed to \a
gamma. If the picture format stores a gamma value for which the
picture is intended to be used, then this setting will be used to
modify the picture. Setting to 0.0 will disable gamma correction
(i.e. any specification in the file will be ignored).
The default value is 0.0.
\sa gamma()
*/
void QPictureIO::setGamma(float gamma)
{
d->gamma=gamma;
}
/*!
Returns the gamma value at which the picture will be viewed.
\sa setGamma()
*/
float QPictureIO::gamma() const
{
return d->gamma;
}
/*!
Sets the picture description string for picture handlers that support
picture descriptions to \a description.
Currently, no picture format supported by Qt uses the description
string.
*/
void QPictureIO::setDescription(const QString &description)
{
d->descr = description;
}
/*!
Returns a string that specifies the picture format of the file \a
fileName, or null if the file cannot be read or if the format is
not recognized.
*/
QByteArray QPictureIO::pictureFormat(const QString &fileName)
{
QFile file(fileName);
QByteArray format;
if (!file.open(QIODevice::ReadOnly))
return format;
format = pictureFormat(&file);
file.close();
return format;
}
/*!
\overload
Returns a string that specifies the picture format of the picture read
from IO device \a d, or 0 if the device cannot be read or if the
format is not recognized.
Make sure that \a d is at the right position in the device (for
example, at the beginning of the file).
\sa QIODevice::pos()
*/
QByteArray QPictureIO::pictureFormat(QIODevice *d)
{
// if you change this change the documentation for defineIOHandler()
const int buflen = 14;
char buf[buflen];
char buf2[buflen];
qt_init_picture_handlers();
qt_init_picture_plugins();
int pos = d->pos(); // save position
int rdlen = d->read(buf, buflen); // read a few bytes
QByteArray format;
if (rdlen != buflen)
return format;
memcpy(buf2, buf, buflen);
for (int n = 0; n < rdlen; n++)
if (buf[n] == '\0')
buf[n] = '\001';
if (rdlen > 0) {
buf[rdlen - 1] = '\0';
QString bufStr = QString::fromLatin1(buf);
if (QPHList *list = pictureHandlers()) {
for (int i = 0; i < list->size(); ++i) {
if (list->at(i)->header.indexIn(bufStr) != -1) { // try match with headers
format = list->at(i)->format;
break;
}
}
}
}
d->seek(pos); // restore position
return format;
}
/*!
Returns a sorted list of picture formats that are supported for
picture input.
*/
QList<QByteArray> QPictureIO::inputFormats()
{
QList<QByteArray> result;
qt_init_picture_handlers();
qt_init_picture_plugins();
if (QPHList *list = pictureHandlers()) {
for (int i = 0; i < list->size(); ++i) {
QPictureHandler *p = list->at(i);
if (p->read_picture && !p->obsolete && !result.contains(p->format))
result.append(p->format);
}
}
std::sort(result.begin(), result.end());
return result;
}
/*!
Returns a sorted list of picture formats that are supported for
picture output.
*/
QList<QByteArray> QPictureIO::outputFormats()
{
qt_init_picture_handlers();
qt_init_picture_plugins();
QList<QByteArray> result;
if (QPHList *list = pictureHandlers()) {
for (int i = 0; i < list->size(); ++i) {
QPictureHandler *p = list->at(i);
if (p->write_picture && !p->obsolete && !result.contains(p->format))
result.append(p->format);
}
}
return result;
}
/*!
Reads an picture into memory and returns \c true if the picture was
successfully read; otherwise returns \c false.
Before reading an picture you must set an IO device or a file name.
If both an IO device and a file name have been set, the IO device
will be used.
Setting the picture file format string is optional.
Note that this function does \e not set the \l{format()}{format} used to read the picture. If you need that
information, use the pictureFormat() static functions.
Example:
\snippet picture/picture.cpp 4
\sa setIODevice(), setFileName(), setFormat(), write(), QPixmap::load()
*/
bool QPictureIO::read()
{
QFile file;
QByteArray picture_format;
QPictureHandler *h;
if (d->iodev) { // read from io device
// ok, already open
} else if (!d->fname.isEmpty()) { // read from file
file.setFileName(d->fname);
if (!file.open(QIODevice::ReadOnly))
return false; // cannot open file
d->iodev = &file;
} else { // no file name or io device
return false;
}
if (d->frmt.isEmpty()) {
// Try to guess format
picture_format = pictureFormat(d->iodev); // get picture format
if (picture_format.isEmpty()) {
if (file.isOpen()) { // unknown format
file.close();
d->iodev = 0;
}
return false;
}
} else {
picture_format = d->frmt;
}
h = get_picture_handler(picture_format);
if (file.isOpen()) {
#if !defined(Q_OS_UNIX)
if (h && h->text_mode) { // reopen in translated mode
file.close();
file.open(QIODevice::ReadOnly | QIODevice::Text);
}
else
#endif
file.seek(0); // position to start
}
d->iostat = 1; // assume error
if (h && h->read_picture)
(*h->read_picture)(this);
if (file.isOpen()) { // picture was read using file
file.close();
d->iodev = 0;
}
return d->iostat == 0; // picture successfully read?
}
/*!
Writes an picture to an IO device and returns \c true if the picture was
successfully written; otherwise returns \c false.
Before writing an picture you must set an IO device or a file name.
If both an IO device and a file name have been set, the IO device
will be used.
The picture will be written using the specified picture format.
Example:
\snippet picture/picture.cpp 5
\sa setIODevice(), setFileName(), setFormat(), read(), QPixmap::save()
*/
bool QPictureIO::write()
{
if (d->frmt.isEmpty())
return false;
QPictureHandler *h = get_picture_handler(d->frmt);
if (!h || !h->write_picture) {
qWarning("QPictureIO::write: No such picture format handler: %s",
format());
return false;
}
QFile file;
if (!d->iodev && !d->fname.isEmpty()) {
file.setFileName(d->fname);
bool translate = h->text_mode==QPictureHandler::TranslateInOut;
QIODevice::OpenMode fmode = translate ? QIODevice::WriteOnly | QIODevice::Text : QIODevice::OpenMode(QIODevice::WriteOnly);
if (!file.open(fmode)) // couldn't create file
return false;
d->iodev = &file;
}
d->iostat = 1;
(*h->write_picture)(this);
if (file.isOpen()) { // picture was written using file
file.close();
d->iodev = 0;
}
return d->iostat == 0; // picture successfully written?
}
#endif //QT_NO_PICTUREIO
QT_END_NAMESPACE
#endif // QT_NO_PICTURE

View File

@ -48,7 +48,6 @@
QT_BEGIN_NAMESPACE
#ifndef QT_NO_PICTURE
class QPicturePrivate;
@ -69,10 +68,10 @@ public:
bool play(QPainter *p);
bool load(QIODevice *dev, const char *format = nullptr);
bool load(const QString &fileName, const char *format = nullptr);
bool save(QIODevice *dev, const char *format = nullptr);
bool save(const QString &fileName, const char *format = nullptr);
bool load(QIODevice *dev);
bool load(const QString &fileName);
bool save(QIODevice *dev);
bool save(const QString &fileName);
QRect boundingRect() const;
void setBoundingRect(const QRect &r);
@ -88,14 +87,6 @@ public:
friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &in, const QPicture &p);
friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &in, QPicture &p);
#if QT_DEPRECATED_SINCE(5, 10)
static QT_DEPRECATED const char* pictureFormat(const QString &fileName);
static QT_DEPRECATED QList<QByteArray> inputFormats();
static QT_DEPRECATED QList<QByteArray> outputFormats();
static QT_DEPRECATED QStringList inputFormatList();
static QT_DEPRECATED QStringList outputFormatList();
#endif // QT_DEPRECATED_SINCE(5, 10)
QPaintEngine *paintEngine() const override;
protected:
@ -118,67 +109,6 @@ public:
Q_DECLARE_SHARED(QPicture)
#ifndef QT_NO_PICTUREIO
class QIODevice;
class QPictureIO;
typedef void (*picture_io_handler)(QPictureIO *); // picture IO handler
struct QPictureIOData;
class Q_GUI_EXPORT QPictureIO
{
public:
QPictureIO();
QPictureIO(QIODevice *ioDevice, const char *format);
QPictureIO(const QString &fileName, const char *format);
~QPictureIO();
const QPicture &picture() const;
int status() const;
const char *format() const;
QIODevice *ioDevice() const;
QString fileName() const;
int quality() const;
QString description() const;
const char *parameters() const;
float gamma() const;
void setPicture(const QPicture &);
void setStatus(int);
void setFormat(const char *);
void setIODevice(QIODevice *);
void setFileName(const QString &);
void setQuality(int);
void setDescription(const QString &);
void setParameters(const char *);
void setGamma(float);
bool read();
bool write();
static QByteArray pictureFormat(const QString &fileName);
static QByteArray pictureFormat(QIODevice *);
static QList<QByteArray> inputFormats();
static QList<QByteArray> outputFormats();
static void defineIOHandler(const char *format,
const char *header,
const char *flags,
picture_io_handler read_picture,
picture_io_handler write_picture);
private:
Q_DISABLE_COPY(QPictureIO)
void init();
QPictureIOData *d;
};
#endif //QT_NO_PICTUREIO
/*****************************************************************************
QPicture stream functions
*****************************************************************************/

View File

@ -1,135 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or (at your option) the GNU General
** Public license version 3 or any later version approved by the KDE Free
** Qt Foundation. The licenses are as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
** https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include "qpictureformatplugin.h"
#if !defined(QT_NO_PICTURE)
#include "qpicture.h"
QT_BEGIN_NAMESPACE
/*!
\obsolete
\class QPictureFormatPlugin
\brief The QPictureFormatPlugin class provides an abstract base
for custom picture format plugins.
\ingroup plugins
\inmodule QtGui
The picture format plugin is a simple plugin interface that makes
it easy to create custom picture formats that can be used
transparently by applications.
Writing an picture format plugin is achieved by subclassing this
base class, reimplementing the pure virtual functions
loadPicture(), savePicture(), and installIOHandler(), and
exporting the class with the Q_PLUGIN_METADATA() macro.
The json file containing the metadata should contain one entry
with the list of picture formats supported by the plugin:
\code
{ "Keys": [ "mypictureformat" ] }
\endcode
\sa {How to Create Qt Plugins}
*/
/*!
\fn bool QPictureFormatPlugin::installIOHandler(const QString &format)
Installs a QPictureIO picture I/O handler for the picture format \a
format. Returns \c true on success.
*/
/*!
Constructs an picture format plugin with the given \a parent.
This is invoked automatically by the moc generated code that exports the plugin.
*/
QPictureFormatPlugin::QPictureFormatPlugin(QObject *parent)
: QObject(parent)
{
}
/*!
Destroys the picture format plugin.
You never have to call this explicitly. Qt destroys a plugin
automatically when it is no longer used.
*/
QPictureFormatPlugin::~QPictureFormatPlugin()
{
}
/*!
Loads the picture stored in the file called \a fileName, with the
given \a format, into *\a picture. Returns \c true on success;
otherwise returns \c false.
\sa savePicture()
*/
bool QPictureFormatPlugin::loadPicture(const QString &format, const QString &fileName, QPicture *picture)
{
Q_UNUSED(format)
Q_UNUSED(fileName)
Q_UNUSED(picture)
return false;
}
/*!
Saves the given \a picture into the file called \a fileName,
using the specified \a format. Returns \c true on success; otherwise
returns \c false.
\sa loadPicture()
*/
bool QPictureFormatPlugin::savePicture(const QString &format, const QString &fileName, const QPicture &picture)
{
Q_UNUSED(format)
Q_UNUSED(fileName)
Q_UNUSED(picture)
return false;
}
#endif // QT_NO_PICTURE
QT_END_NAMESPACE

View File

@ -1,76 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtGui module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or (at your option) the GNU General
** Public license version 3 or any later version approved by the KDE Free
** Qt Foundation. The licenses are as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
** https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QPICTUREFORMATPLUGIN_H
#define QPICTUREFORMATPLUGIN_H
#include <QtGui/qtguiglobal.h>
#include <QtCore/qplugin.h>
#include <QtCore/qfactoryinterface.h>
QT_BEGIN_NAMESPACE
#if !defined(QT_NO_PICTURE)
class QPicture;
class QImage;
class QString;
class QStringList;
#define QPictureFormatInterface_iid "org.qt-project.Qt.QPictureFormatInterface"
class Q_GUI_EXPORT QPictureFormatPlugin : public QObject
{
Q_OBJECT
public:
explicit QPictureFormatPlugin(QObject *parent = nullptr);
~QPictureFormatPlugin();
virtual bool loadPicture(const QString &format, const QString &filename, QPicture *pic);
virtual bool savePicture(const QString &format, const QString &filename, const QPicture &pic);
virtual bool installIOHandler(const QString &format) = 0;
};
#endif // QT_NO_PICTURE
QT_END_NAMESPACE
#endif // QPICTUREFORMATPLUGIN_H

View File

@ -644,9 +644,6 @@ QT_CLASS_LIB(QImageReader, QtGui, qimagereader.h)
QT_CLASS_LIB(QImageWriter, QtGui, qimagewriter.h)
QT_CLASS_LIB(QMovie, QtGui, qmovie.h)
QT_CLASS_LIB(QPicture, QtGui, qpicture.h)
QT_CLASS_LIB(QPictureIO, QtGui, qpicture.h)
QT_CLASS_LIB(QPictureFormatInterface, QtGui, qpictureformatplugin.h)
QT_CLASS_LIB(QPictureFormatPlugin, QtGui, qpictureformatplugin.h)
QT_CLASS_LIB(QPixmap, QtGui, qpixmap.h)
QT_CLASS_LIB(QPixmapCache, QtGui, qpixmapcache.h)
QT_CLASS_LIB(QAbstractItemDelegate, QtWidgets, qabstractitemdelegate.h)

View File

@ -37,6 +37,8 @@
#include <qscreen.h>
#include <limits.h>
#ifndef QT_NO_PICTURE
class tst_QPicture : public QObject
{
Q_OBJECT
@ -45,7 +47,6 @@ public:
tst_QPicture();
private slots:
void getSetCheck();
void devType();
void paintingActive();
void boundingRect();
@ -56,31 +57,6 @@ private slots:
void boundaryValues();
};
// Testing get/set functions
void tst_QPicture::getSetCheck()
{
QPictureIO obj1;
// const QPicture & QPictureIO::picture()
// void QPictureIO::setPicture(const QPicture &)
// const char * QPictureIO::format()
// void QPictureIO::setFormat(const char *)
const char var2[] = "PNG";
obj1.setFormat(var2);
QCOMPARE(var2, obj1.format());
obj1.setFormat((char *)0);
// The format is stored internally in a QString, so return is always a valid char *
QVERIFY(QString(obj1.format()).isEmpty());
// const char * QPictureIO::parameters()
// void QPictureIO::setParameters(const char *)
const char var3[] = "Bogus data";
obj1.setParameters(var3);
QCOMPARE(var3, obj1.parameters());
obj1.setParameters((char *)0);
// The format is stored internally in a QString, so return is always a valid char *
QVERIFY(QString(obj1.parameters()).isEmpty());
}
tst_QPicture::tst_QPicture()
{
}
@ -316,6 +292,7 @@ void tst_QPicture::boundaryValues()
painter.end();
}
QTEST_MAIN(tst_QPicture)
#include "tst_qpicture.moc"
#endif // QT_NO_PICTURE