Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QPixmap



  • Bonjour a tous,
    J'écris depuis quelques temps des petits programmes sous Qt Creator.
    Aujourd'hui j'essaye de coder un delegate pour afficher une petite photo en base64.

    void pixDelegate::setEditorData( QWidget *editor, const QModelIndex &index ) const
    {
    if (index.column() != 3)
    {
    QItemDelegate::setEditorData(editor, index);
    return;
    }

    QLabel *label = qobject_cast<QLabel *>(editor);
    if (label)
    {
        QPixmap pixmap;
        QByteArray image Data = index.data(Qt::EditRole).toByteArray();
        if (pixmap.loadFromData(imageData))
                label->setPixmap(pixmap);
        return;
    }
    

    }



  • Bonjour a tous,
    Désolé, mon 1er post est partis avant que ma question soit terminée.
    J'écris depuis quelques temps des petits programmes sous Qt Creator.
    Aujourd'hui j'essaye de coder un delegate pour afficher une petite photo en base64.

    En fait je n'ai pas d'expérience dans l'écriture des delegate.
    et de plus dans mon cas, la déclaration du QPixmap pixmap me renvoie (dans le debugger) pixmap invalid ???

    merci pour vos réponses,
    A bientôt
    polenord

    void pixDelegate::setEditorData( QWidget *editor, const QModelIndex &index ) const
    {
    if (index.column() != 3)
    {
    QItemDelegate::setEditorData(editor, index);
    return;
    }
    QLabel *label = qobject_cast<QLabel *>(editor);
    if (label)
    {
    QPixmap pixmap;
    QByteArray image Data = index.data(Qt::EditRole).toByteArray();
    if (pixmap.loadFromData(imageData))
    label->setPixmap(pixmap);
    return;
    }
    }


  • Lifetime Qt Champion

    Bonsoir et bienvenue sur devnet,

    Si l'image est en base64, il faut d'abord la décoder.

    Pour ce qui est du message parti trop vite, tous les messages sont editable par leur auteur donc des corrections peuvent y être apportées sans avoir besoin de créer de nouveaux messages.



  • Bonsoir et merci SGaist pour ta réponse,
    effectivement l'image arrive codée en base64 dans le delegate, elle provient d'un fichier de contacts en *.vcf dont j'extrais les lignes de balise "PHOTO".
    Je vais la décoder avant d'entrer dans le delegate , comme tu me l'explique, et je reposterai pour donner le résultat.
    merci encore.
    polenord



  • @polenord
    bonjour,
    j'ai trouvé et corrigé mon erreur.
    l'image que je récupérai dans le delegate n'était pas conforme au format base64, il manquait le caractère "/" en début de chaîne.
    voici mon code corrigé :

    void pixDelegate::setEditorData( QWidget *editor, const QModelIndex &index ) const
    {
        if (index.column() != 3)
        {
            QItemDelegate::setEditorData(editor, index);
            return;
        }.
        QLabel *label = qobject_cast<QLabel *>(editor);
        if (label)
        {
            QPixmap pixmap;
            QVariant imageData = index.data();
            pixmap.loadFromData(QByteArray::fromBase64(imageData.toByteArray()));
            label->setPixmap(pixmap);
        }
    }
    

    tout marche bien,
    merci à tous mes lecteurs,
    polenord


Log in to reply