كيفية الحصول على السحب والإسقاط من دفتر العناوين أبل في كيو تي 4.4 على نظام التشغيل Mac OS X 10.5 / 10.6

StackOverflow https://stackoverflow.com/questions/1804728

  •  05-07-2019
  •  | 
  •  

سؤال

واني اسعى الى فخ سحب وإسقاط الأحداث من معيار أبل دفتر العناوين التطبيق لبلدي كيو تي التطبيق. هذا الرمز يعمل بشكل جيد مع كيو تي 4.4. على نظام التشغيل Mac OS X 10.4:

void 
MyView::contentsDropEvent( QDropEvent* e )
{
    QList<QUrl> urls = e->mimeData()->urls();
    ...

وبعد ذلك يمكنني أن استخدام URL للحصول على بصيغة بطاقة. عجيب.

ولكن من ماك OS X 10.5 دفتر العناوين التفاح لم يعد يبدو لدعم النص / أوري القائمة. حتى ه-> mimeData () -> عناوين المواقع () بإرجاع قائمة فارغة. والأسوأ من ذلك ه-> mimeData () -> أشكال () بإرجاع قائمة فارغة. كيف يمكنني معرفة ما الذي vCards أنهم جروا؟

وهنا هو تعليق من مهندس نوكيا كيو تي في هذه المشكلة:

<اقتباس فقرة>   

و"توقف Adressbook توفير قطرة   البيانات كنص / أوري القائمة متوافقة   البيانات نكهة في OS 10.5. ليس كثيرا نحن   يمكن القيام به حيال ذلك. نكهة أنها   تقدم بدلا من ذلك "public.vcard. نحن   يمكن طرح الدعم لهذا باعتباره   طلب التنفيذ، ولكن حدسي   الشعور هو أن هذا هو أيضا   تطبيق محددة، ويمكن فقط كما   كذلك سيتم تنفيذها من قبل التطبيق   مطور من قبل إن شاء subclasses ترث QMacMimeData "

ولكن لا يوجد QMacMimeData في وثائق كيو تي 4.4 أو 4.5. أي أفكار على كيف يمكن معرفة ما جره؟

هل كانت مفيدة؟

المحلول

وrichardmg من كيو تي / نوكيا يرجى تزويد لي مع بعض الأمثلة التعليمات البرمجية. لقد ملأت بعض الثغرات. هذا وتعمل الآن على ما يرام على نظام التشغيل Mac OS X 10.5.

#include <QtGui>

class VCardMime : public QMacPasteboardMime
{
    public:
    VCardMime() : QMacPasteboardMime(MIME_ALL)
    { }

    QString convertorName()
    {
        return QString("VCardMime");
    }

    bool canConvert(const QString &mime, QString flav)
    {
        return mimeFor(flav) == mime;
    }

    QString mimeFor(QString flav)
    {
        if (flav == QString("public.vcard"))
            return QString("application/x-mycompany-VCard");
        return QString();
    }

    QString flavorFor(const QString &mime)
    {
        if (mime == QString("application/x-mycompany-VCard"))
            return QString("public.vcard");
        return QString();
    }

    QVariant convertToMime(const QString &mime, QList<QByteArray> data, QString flav)
    {
        QByteArray all;
        foreach ( QByteArray i, data )
        {
            all += i;
        }
        return QVariant( all );
    }

    QList<QByteArray> convertFromMime(const QString &mime, QVariant data, QString flav)
    {
        // Todo: implement!
        return QList<QByteArray>();
    }

};

class TestWidget : public QWidget
{

public:
    TestWidget() : QWidget(0)
    {
        new VCardMime();
        setAcceptDrops(true);
    }

    void contentsDropEvent(QDropEvent* e)
    {
        if ( e->mimeData()->hasFormat( "application/x-mycompany-VCard" ) )
        {                
            QString s = QString( e->mimeData()->data( "application/x-mycompany-VCard" ) );

            // s now contains text of vcard

            e->acceptProposedAction();
        }
    }
};

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    TestWidget wid1;
    wid1.show();
    return app.exec();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top