Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qutimimeconverter.mm
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include <ImageIO/ImageIO.h>
5#include <CoreFoundation/CoreFoundation.h>
6#include <UniformTypeIdentifiers/UTCoreTypes.h>
7
8#include <QtCore/qsystemdetection.h>
9#include <QtCore/qurl.h>
10#include <QtGui/qimage.h>
11#include <QtCore/qmimedata.h>
12#include <QtCore/qstringconverter.h>
13
14#if defined(Q_OS_MACOS)
15#import <AppKit/AppKit.h>
16#else
17#include <MobileCoreServices/MobileCoreServices.h>
18#endif
19
20#if defined(QT_PLATFORM_UIKIT)
21#import <UIKit/UIKit.h>
22#endif
23
24#include "qutimimeconverter.h"
25#include "qmacmimeregistry_p.h"
26#include "qguiapplication.h"
27#include "private/qcore_mac_p.h"
28
30
31using namespace Qt::StringLiterals;
32
33/*****************************************************************************
34 QDnD debug facilities
35 *****************************************************************************/
36//#define DEBUG_MIME_MAPS
37
103QUtiMimeConverter::QUtiMimeConverter(HandlerScope scope)
104 : m_scope(scope)
105{
107}
108
119
128
133{
135 return 1;
136}
137
189public:
191
192 QString utiForMime(const QString &mime) const override;
193 QString mimeForUti(const QString &uti) const override;
194 QVariant convertToMime(const QString &mime, const QList<QByteArray> &data,
195 const QString &uti) const override;
196 QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data,
197 const QString &uti) const override;
198};
199
201{
202 // do not handle the mime type name in the drag pasteboard
203 if (mime == "application/x-qt-mime-type-name"_L1)
204 return QString();
205 QString ret = "com.trolltech.anymime."_L1 + mime;
206 return ret.replace(u'/', "--"_L1);
207}
208
210{
211 const QString any_prefix = "com.trolltech.anymime."_L1;
212 if (uti.size() > any_prefix.length() && uti.startsWith(any_prefix))
213 return uti.mid(any_prefix.length()).replace("--"_L1, "/"_L1);
214 return QString();
215}
216
217QVariant QMacMimeAny::convertToMime(const QString &mime, const QList<QByteArray> &data,
218 const QString &) const
219{
220 if (data.count() > 1)
221 qWarning("QMacMimeAny: Cannot handle multiple member data");
223 if (mime == "text/plain"_L1)
224 ret = QString::fromUtf8(data.first());
225 else
226 ret = data.first();
227 return ret;
228}
229
230QList<QByteArray> QMacMimeAny::convertFromMime(const QString &mime, const QVariant &data,
231 const QString &) const
232{
233 QList<QByteArray> ret;
234 if (mime == "text/plain"_L1)
235 ret.append(data.toString().toUtf8());
236 else
237 ret.append(data.toByteArray());
238 return ret;
239}
240
242private:
243
244public:
246
247 QString utiForMime(const QString &mime) const override;
248 QString mimeForUti(const QString &uti) const override;
249 QVariant convertToMime(const QString &mime, const QList<QByteArray> &data, const QString &uti) const override;
250 QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override;
251};
252
254{
255 if (mime == "application/x-qt-mime-type-name"_L1)
256 return u"com.trolltech.qt.MimeTypeName"_s;
257 return QString();
258}
259
261{
262 return QString();
263}
264
265QVariant QMacMimeTypeName::convertToMime(const QString &, const QList<QByteArray> &, const QString &) const
266{
268 return ret;
269}
270
271QList<QByteArray> QMacMimeTypeName::convertFromMime(const QString &, const QVariant &, const QString &) const
272{
273 QList<QByteArray> ret;
274 ret.append(QString("x-qt-mime-type-name"_L1).toUtf8());
275 return ret;
276}
277
279{
280public:
281 QString utiForMime(const QString &mime) const override;
282 QString mimeForUti(const QString &uti) const override;
283 QVariant convertToMime(const QString &mime, const QList<QByteArray> &data,
284 const QString &uti) const override;
285 QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data,
286 const QString &uti) const override;
287};
288
290{
291 if (mime == "text/plain"_L1)
292 return "public.text"_L1;
293 return QString();
294}
295
297{
298 if (uti == "public.text"_L1)
299 return "text/plain"_L1;
300 return QString();
301}
302
305 const QList<QByteArray> &data, const QString &uti) const
306{
307 if (data.count() > 1)
308 qWarning("QMacMimePlainTextFallback: Cannot handle multiple member data");
309
310 if (uti == "public.text"_L1) {
311 // Note that public.text is documented by Apple to have an undefined encoding. From
312 // testing it seems that utf8 is normally used, at least by Safari on iOS.
313 const QByteArray &firstData = data.first();
314 return QString(QCFString(CFStringCreateWithBytes(kCFAllocatorDefault,
315 reinterpret_cast<const UInt8 *>(firstData.constData()),
316 firstData.size(), kCFStringEncodingUTF8, false)));
317 } else {
318 qWarning("QMime::convertToMime: unhandled mimetype: %s", qPrintable(mimetype));
319 }
320 return QVariant();
321}
322
323QList<QByteArray>
325 const QString &uti) const
326{
327 QList<QByteArray> ret;
328 QString string = data.toString();
329 if (uti == "public.text"_L1)
330 ret.append(string.toUtf8());
331 return ret;
332}
333
335{
336public:
337 QString utiForMime(const QString &mime) const override;
338 QString mimeForUti(const QString &uti) const override;
339 QVariant convertToMime(const QString &mime, const QList<QByteArray> &data,
340 const QString &uti) const override;
341 QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data,
342 const QString &uti) const override;
343};
344
346{
347 if (mime == "text/plain"_L1)
348 return "public.utf16-plain-text"_L1;
349 if (qsizetype i = mime.indexOf("charset="_L1); i >= 0) {
350 QString cs(mime.mid(i + 8).toLower());
351 i = cs.indexOf(u';');
352 if (i >= 0)
353 cs = cs.left(i);
354 if (cs == "system"_L1)
355 return "public.utf8-plain-text"_L1;
356 else if (cs == "iso-10646-ucs-2"_L1 || cs == "utf16"_L1)
357 return "public.utf16-plain-text"_L1;
358 }
359 return QString();
360}
361
363{
364 if (uti == "public.utf16-plain-text"_L1 || uti == "public.utf8-plain-text"_L1)
365 return "text/plain"_L1;
366 return QString();
367}
368
371 const QList<QByteArray> &data, const QString &uti) const
372{
373 if (data.count() > 1)
374 qWarning("QMacMimeUnicodeText: Cannot handle multiple member data");
375 const QByteArray &firstData = data.first();
376 // I can only handle two types (system and unicode) so deal with them that way
378 if (uti == "public.utf8-plain-text"_L1) {
379 ret = QString::fromUtf8(firstData);
380 } else if (uti == "public.utf16-plain-text"_L1) {
382 ret = str;
383 } else {
384 qWarning("QMime::convertToMime: unhandled mimetype: %s", qPrintable(mimetype));
385 }
386 return ret;
387}
388
389QList<QByteArray>
391 const QString &uti) const
392{
393 QList<QByteArray> ret;
394 QString string = data.toString();
395 if (uti == "public.utf8-plain-text"_L1)
396 ret.append(string.toUtf8());
397 else if (uti == "public.utf16-plain-text"_L1) {
398 QStringEncoder::Flags f;
399#if defined(Q_OS_MACOS)
400 // Some applications such as Microsoft Excel, don't deal well with
401 // a BOM present, so we follow the traditional approach of Qt on
402 // macOS to not generate public.utf16-plain-text with a BOM.
404#else
405 // Whereas iOS applications will fail to paste if we do _not_
406 // include a BOM in the public.utf16-plain-text content, most
407 // likely due to converting the data using NSUTF16StringEncoding
408 // which assumes big-endian byte order if there is no BOM.
410#endif
412 ret.append(encoder(string));
413 }
414 return ret;
415}
416
418{
419public:
420 QString utiForMime(const QString &mime) const override;
421 QString mimeForUti(const QString &uti) const override;
422 QVariant convertToMime(const QString &mime, const QList<QByteArray> &data,
423 const QString &uti) const override;
424 QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data,
425 const QString &uti) const override;
426};
427
429{
430 if (mime == "text/html"_L1)
431 return "public.html"_L1;
432 return QString();
433}
434
436{
437 if (uti == "public.html"_L1)
438 return "text/html"_L1;
439 return QString();
440}
441
444 const QList<QByteArray> &data, const QString &uti) const
445{
446 if (!canConvert(mimeType, uti))
447 return QVariant();
448 if (data.count() > 1)
449 qWarning("QMacMimeHTMLText: Cannot handle multiple member data");
450 return data.first();
451}
452
453QList<QByteArray>
455 const QVariant &data, const QString &uti) const
456{
457 QList<QByteArray> ret;
458 if (!canConvert(mime, uti))
459 return ret;
460 ret.append(data.toByteArray());
461 return ret;
462}
463
465{
466public:
467 QString utiForMime(const QString &mime) const override;
468 QString mimeForUti(const QString &uti) const override;
469 QVariant convertToMime(const QString &mime, const QList<QByteArray> &data,
470 const QString &uti) const override;
471 QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data,
472 const QString &uti) const override;
473};
474
476{
477 if (mime == "text/html"_L1)
478 return "public.rtf"_L1;
479 return QString();
480}
481
483{
484 if (uti == "public.rtf"_L1)
485 return "text/html"_L1;
486 return QString();
487}
488
491 const QList<QByteArray> &data, const QString &uti) const
492{
493 if (!canConvert(mimeType, uti))
494 return QVariant();
495 if (data.count() > 1)
496 qWarning("QMacMimeHTMLText: Cannot handle multiple member data");
497
498 // Read RTF into to NSAttributedString, then convert the string to HTML
499 NSAttributedString *string = [[NSAttributedString alloc] initWithData:data.at(0).toNSData()
500 options:@{NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType}
501 documentAttributes:nil
502 error:nil];
503
504 NSError *error;
505 NSRange range = NSMakeRange(0, [string length]);
506 NSDictionary *dict = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};
507 NSData *htmlData = [string dataFromRange:range documentAttributes:dict error:&error];
508 return QByteArray::fromNSData(htmlData);
509}
510
511QList<QByteArray>
513 const QVariant &data, const QString &uti) const
514{
515 QList<QByteArray> ret;
516 if (!canConvert(mime, uti))
517 return ret;
518
519 NSAttributedString *string = [[NSAttributedString alloc] initWithData:data.toByteArray().toNSData()
520 options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType}
521 documentAttributes:nil
522 error:nil];
523
524 NSError *error;
525 NSRange range = NSMakeRange(0, [string length]);
526 NSDictionary *dict = @{NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType};
527 NSData *rtfData = [string dataFromRange:range documentAttributes:dict error:&error];
528 ret << QByteArray::fromNSData(rtfData);
529 return ret;
530}
531
533{
534public:
535 QString utiForMime(const QString &mime) const override;
536 QString mimeForUti(const QString &uti) const override;
537 QVariant convertToMime(const QString &mime, const QList<QByteArray> &data,
538 const QString &uti) const override;
539 QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data,
540 const QString &uti) const override;
541 int count(const QMimeData *mimeData) const override;
542};
543
545{
546 if (mime == "text/uri-list"_L1)
547 return "public.file-url"_L1;
548 return QString();
549}
550
552{
553 if (uti == "public.file-url"_L1)
554 return "text/uri-list"_L1;
555 return QString();
556}
557
560 const QList<QByteArray> &data, const QString &uti) const
561{
562 if (!canConvert(mime, uti))
563 return QVariant();
564 QList<QVariant> ret;
565 for (int i = 0; i < data.size(); ++i) {
566 const QByteArray &a = data.at(i);
567 NSString *urlString = [[[NSString alloc] initWithBytesNoCopy:(void *)a.data() length:a.size()
568 encoding:NSUTF8StringEncoding freeWhenDone:NO] autorelease];
569 NSURL *nsurl = [NSURL URLWithString:urlString];
570 QUrl url;
571 // OS X 10.10 sends file references instead of file paths
572 if ([nsurl isFileReferenceURL]) {
573 url = QUrl::fromNSURL([nsurl filePathURL]);
574 } else {
575 url = QUrl::fromNSURL(nsurl);
576 }
577
578 if (url.host().toLower() == "localhost"_L1)
580
582 ret.append(url);
583 }
584 return QVariant(ret);
585}
586
587QList<QByteArray>
589 const QVariant &data, const QString &uti) const
590{
591 QList<QByteArray> ret;
592 if (!canConvert(mime, uti))
593 return ret;
594 QList<QVariant> urls = data.toList();
595 for (int i = 0; i < urls.size(); ++i) {
596 QUrl url = urls.at(i).toUrl();
597 if (url.scheme().isEmpty())
598 url.setScheme("file"_L1);
599 if (url.scheme() == "file"_L1) {
600 if (url.host().isEmpty())
601 url.setHost("localhost"_L1);
603 }
604 if (url.isLocalFile())
605 ret.append(url.toEncoded());
606 }
607 return ret;
608}
609
611{
612 return mimeData->urls().count();
613}
614
616{
617public:
618 QString utiForMime(const QString &mime) const override;
619 QString mimeForUti(const QString &uti) const override;
620 QVariant convertToMime(const QString &mime, const QList<QByteArray> &data,
621 const QString &uti) const override;
622 QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data,
623 const QString &uti) const override;
624};
625
627{
628 if (mime.startsWith("text/uri-list"_L1))
629 return "public.url"_L1;
630 return QString();
631}
632
634{
635 if (uti == "public.url"_L1)
636 return "text/uri-list"_L1;
637 return QString();
638}
639
641 const QList<QByteArray> &data, const QString &uti) const
642{
643 if (!canConvert(mime, uti))
644 return QVariant();
645
646 QList<QVariant> ret;
647 for (int i=0; i<data.size(); ++i) {
649 if (url.host().toLower() == "localhost"_L1)
652 ret.append(url);
653 }
654 return QVariant(ret);
655}
656
658 const QVariant &data, const QString &uti) const
659{
660 QList<QByteArray> ret;
661 if (!canConvert(mime, uti))
662 return ret;
663
664 QList<QVariant> urls = data.toList();
665 for (int i=0; i<urls.size(); ++i) {
666 QUrl url = urls.at(i).toUrl();
667 if (url.scheme().isEmpty())
668 url.setScheme("file"_L1);
669 if (url.scheme() == "file"_L1) {
670 if (url.host().isEmpty())
671 url.setHost("localhost"_L1);
673 }
674 ret.append(url.toEncoded());
675 }
676 return ret;
677}
678
680{
681public:
682 QString utiForMime(const QString &mime) const override;
683 QString mimeForUti(const QString &uti) const override;
684 QVariant convertToMime(const QString &mime, const QList<QByteArray> &data,
685 const QString &uti) const override;
686 QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data,
687 const QString &uti) const override;
688};
689
691{
692 if (mime.startsWith("text/vcard"_L1))
693 return "public.vcard"_L1;
694 return QString();
695}
696
698{
699 if (uti == "public.vcard"_L1)
700 return "text/vcard"_L1;
701 return QString();
702}
703
705 const QList<QByteArray> &data, const QString &uti) const
706{
707 if (!canConvert(mime, uti))
708 return QVariant();
709 QByteArray cards;
710 if (uti == "public.vcard"_L1) {
711 for (int i=0; i<data.size(); ++i)
712 cards += data[i];
713 }
714 return QVariant(cards);
715}
716
718 const QVariant &data, const QString &uti) const
719{
720 QList<QByteArray> ret;
721 if (!canConvert(mime, uti))
722 return ret;
723
724 if (mime == "text/vcard"_L1)
725 ret.append(data.toString().toUtf8());
726 return ret;
727}
728
729extern QImage qt_mac_toQImage(CGImageRef image);
730extern CGImageRef qt_mac_toCGImage(const QImage &qImage);
731
733{
734public:
735 QString utiForMime(const QString &mime) const override;
736 QString mimeForUti(const QString &uti) const override;
737 QVariant convertToMime(const QString &mime, const QList<QByteArray> &data,
738 const QString &uti) const override;
739 QList<QByteArray> convertFromMime(const QString &mime, const QVariant &data,
740 const QString &uti) const override;
741};
742
744{
745 if (mime.startsWith("application/x-qt-image"_L1))
746 return "public.tiff"_L1;
747 return QString();
748}
749
751{
752 if (uti == "public.tiff"_L1)
753 return "application/x-qt-image"_L1;
754 return QString();
755}
756
758 const QList<QByteArray> &data, const QString &uti) const
759{
760 if (data.count() > 1)
761 qWarning("QMacMimeTiff: Cannot handle multiple member data");
762
763 if (!canConvert(mime, uti))
764 return QVariant();
765
766 QCFType<CFDataRef> tiffData = data.first().toRawCFData();
767 QCFType<CGImageSourceRef> imageSource = CGImageSourceCreateWithData(tiffData, 0);
768
769 if (QCFType<CGImageRef> image = CGImageSourceCreateImageAtIndex(imageSource, 0, 0))
771
772 return QVariant();
773}
774
776 const QVariant &variant, const QString &uti) const
777{
778 if (!canConvert(mime, uti))
779 return QList<QByteArray>();
780
781 QCFType<CFMutableDataRef> data = CFDataCreateMutable(0, 0);
782 QCFType<CGImageDestinationRef> imageDestination = CGImageDestinationCreateWithData(data,
783 (CFStringRef)UTTypeTIFF.identifier, 1, 0);
784
785 if (!imageDestination)
786 return QList<QByteArray>();
787
788 QImage img = qvariant_cast<QImage>(variant);
789 NSDictionary *props = @{
790 static_cast<NSString *>(kCGImagePropertyPixelWidth): @(img.width()),
791 static_cast<NSString *>(kCGImagePropertyPixelHeight): @(img.height())
792 };
793
794 CGImageDestinationAddImage(imageDestination, qt_mac_toCGImage(img),
795 static_cast<CFDictionaryRef>(props));
796 CGImageDestinationFinalize(imageDestination);
797
798 return QList<QByteArray>() << QByteArray::fromCFData(data);
799}
800
801namespace QMacMimeRegistry {
802
804{
805 // Create QMacMimeAny first to put it at the end of globalMimeList
806 // with lowest priority. (the constructor prepends to the list)
807 new QMacMimeAny;
808
809 //standard types that we wrap
810 new QMacMimeTiff;
813 new QMacMimeRtfText;
815 new QMacMimeFileUri;
816 new QMacMimeUrl;
818 new QMacMimeVCard;
819}
820
821}
822
\inmodule QtCore
Definition qbytearray.h:57
char at(qsizetype i) const
Returns the byte at index position i in the byte array.
Definition qbytearray.h:600
QByteArray first(qsizetype n) const &
Definition qbytearray.h:196
\inmodule QtGui
Definition qimage.h:37
QList< T > toList() const noexcept
Definition qlist.h:723
qsizetype count() const noexcept
Definition qlist.h:398
void append(parameter_type t)
Definition qlist.h:458
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
int count(const QMimeData *mimeData) const override
Returns the item count for the given mimeData.
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QVariant convertToMime(const QString &mime, const QList< QByteArray > &data, const QString &uti) const override
Returns data converted from Mac UTI uti to MIME type mime.
QString utiForMime(const QString &mime) const override
Returns the Mac UTI used for MIME type mime, or an empty string if this converter does not support co...
QString mimeForUti(const QString &uti) const override
Returns the MIME type used for Mac UTI uti, or an empty string if this converter does not support con...
QList< QByteArray > convertFromMime(const QString &mime, const QVariant &data, const QString &uti) const override
Returns data converted from MIME type mime to Mac UTI uti.
\inmodule QtCore
Definition qmimedata.h:16
QList< QUrl > urls() const
Returns a list of URLs contained within the MIME data object.
\inmodule QtCore
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
QString left(qsizetype n) const &
Definition qstring.h:363
qsizetype indexOf(QLatin1StringView s, qsizetype from=0, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Definition qstring.cpp:4517
QString & replace(qsizetype i, qsizetype len, QChar after)
Definition qstring.cpp:3824
QString mid(qsizetype position, qsizetype n=-1) const &
Definition qstring.cpp:5300
bool isEmpty() const noexcept
Returns true if the string has no characters; otherwise returns false.
Definition qstring.h:192
static QString fromUtf8(QByteArrayView utf8)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:6018
QString toLower() const &
Definition qstring.h:435
QString & append(QChar c)
Definition qstring.cpp:3252
@ NormalizationForm_C
Definition qstring.h:619
@ NormalizationForm_D
Definition qstring.h:618
QString normalized(NormalizationForm mode, QChar::UnicodeVersion version=QChar::Unicode_Unassigned) const
Returns the string in the given Unicode normalization mode, according to the given version of the Uni...
Definition qstring.cpp:8475
\inmodule QtCore
Definition qurl.h:94
bool isLocalFile() const
Definition qurl.cpp:3445
QString host(ComponentFormattingOptions=FullyDecoded) const
Returns the host of the URL if it is defined; otherwise an empty string is returned.
Definition qurl.cpp:2340
QByteArray toEncoded(FormattingOptions options=FullyEncoded) const
Returns the encoded representation of the URL if it's valid; otherwise an empty QByteArray is returne...
Definition qurl.cpp:2967
QString scheme() const
Returns the scheme of the URL.
Definition qurl.cpp:1991
void setScheme(const QString &scheme)
Sets the scheme of the URL to scheme.
Definition qurl.cpp:1967
void setHost(const QString &host, ParsingMode mode=DecodedMode)
Sets the host of the URL to host.
Definition qurl.cpp:2289
void setPath(const QString &path, ParsingMode mode=DecodedMode)
Sets the path of the URL to path.
Definition qurl.cpp:2414
static QUrl fromEncoded(QByteArrayView input, ParsingMode mode=TolerantMode)
Parses input and returns the corresponding QUrl.
Definition qurl.cpp:2988
QString path(ComponentFormattingOptions options=FullyDecoded) const
Returns the path of the URL.
Definition qurl.cpp:2468
The QUtiMimeConverter class converts between a MIME type and a \l{https://developer....
bool canConvert(const QString &mime, const QString &uti) const
Returns true if the converter can convert (both ways) between mime and uti; otherwise returns false.
virtual ~QUtiMimeConverter()
Destroys a conversion object, removing it from the global list of available converters.
QUtiMimeConverter()
Constructs a new conversion object and adds it to the globally accessed list of available converters.
virtual int count(const QMimeData *mimeData) const
Returns the item count for the given mimeData.
\inmodule QtCore
Definition qvariant.h:65
QString str
[2]
void unregisterMimeConverter(QUtiMimeConverter *macMime)
void registerMimeConverter(QUtiMimeConverter *macMime)
Combined button and popup list for selecting options.
Definition image.cpp:4
DBusConnection const char DBusError * error
const char * mimeType
#define qWarning
Definition qlogging.h:166
return ret
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLenum GLsizei length
GLenum GLenum GLsizei count
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLfloat GLfloat f
GLsizei range
GLenum GLuint GLsizei const GLenum * props
GLint void * img
Definition qopenglext.h:233
#define qPrintable(string)
Definition qstring.h:1531
#define Q_UNUSED(x)
ptrdiff_t qsizetype
Definition qtypes.h:165
QImage qt_mac_toQImage(CGImageRef image)
CGImageRef qt_mac_toCGImage(const QImage &qImage)
QUrl url("example.com")
[constructor-url-reference]
application x qt windows mime
[2]
QMimeData * mimeData
QVariant variant
[1]