QClipboard e immagini



  • ciao!

    volevo capire l'utilizzo di QClipboard ed ho scritto questo (riprendendolo dalla documentazione):

    void MainWindow::on_textEdit_textChanged() {
        QClipboard *clipboard = QApplication::clipboard();
        const QMimeData *mimeData = clipboard->mimeData();
        if (mimeData->hasImage()) {
            clipboard->setPixmap(qvariant_cast<QPixmap>(mimeData->imageData()));
            qDebug() << "Immagine";
        } else if (mimeData->hasHtml()) {
            clipboard->setText(mimeData->html());
            qDebug() << "HTML";
        } else if (mimeData->hasText()) {
            clipboard->setText(mimeData->text());
            qDebug() << "Testo semplice";
        } else {
            clipboard->setText(tr("Impossibile visualizzare i dati copiati!"));
            qDebug() << "Nessuno dei precedenti";
        }
    }
    

    ho provato a copiare sia del testo, che del codice html che una immagine.
    nei primi due casi, il qDebug mi da il tipo corretto.
    se copio una immagine, mi esce fuori il path dove si trova l'immagine.
    io invece vorrei copiare proprio l'immagine stessa.
    è possibile?



  • Non penso sia un problema di QClipboard. Se ottieni il path significa che quando hai cliccato su "copia" in verità nella clipboard è stato messo il path, non l'array di byte che rappresenta l'immagine.
    Se vuoi l'immagine eventualmente puoi ottenerla caricandola dal path che ti è stato indicato, posto che il formato sia conosciuto.



  • ciao!

    ok, però il problema è che non ricade mai nella condizione mimeData->hasImage().
    quindi non saprei come identificare che sto provando a copiare una immagine!
    stiamo parlando di normali immagini jpg.

    questo:

    void MainWindow::on_textEdit_textChanged() {
        QClipboard *clipboard = QApplication::clipboard();
        const QMimeData *mimeData = clipboard->mimeData();
        qDebug() << clipboard->mimeData();
        if (mimeData->hasImage()) {
            clipboard->setPixmap(qvariant_cast<QPixmap>(mimeData->imageData()));
            qDebug() << "Immagine";
        } else if (mimeData->hasHtml()) {
            clipboard->setText(mimeData->html());
            qDebug() << "HTML";
        } else if (mimeData->hasText()) {
            clipboard->setText(mimeData->text());
            qDebug() << "Testo semplice";
        } else {
            clipboard->setText(tr("Impossibile visualizzare i dati copiati!"));
            qDebug() << "Nessuno dei precedenti";
        }
    }
    

    mi da questo quando provo a copiare una immagine:

    QXcbClipboardMime(0x7f78f4006250)
    Testo semplice
    


  • Prova ad editare con paint di Windows una immagine, a selezionare una sua parte ed a copiare la parte selezionata e facci sapere cosa accade.



  • allora:

    • sono su linux
    • ho provato con gimp
    • e sto usando una TextEdit

    cosi come sono messo, non succede nulla.
    ho provato a selezionare una parte dell'immagine in gimp e ad incollarla nella textedit.
    non succede niente.



  • @fermatqt said in QClipboard e immagini:

    ho provato a selezionare una parte dell'immagine in gimp e ad incollarla nella textedit.

    QClipboard *clipboard = QApplication::clipboard();
    clipboard->setPixmap(qvariant_cast<QPixmap>(mimeData->imageData()));

    Prendi quello che c'e' nella clipboard e lo metti di nuovo nella clipboard. Il tuo codice non fa quello che chiedi

    se copio una immagine, mi esce fuori il path dove si trova l'immagine.

    Da dove lo stai copiando?

    Puoi usare qDebug() << clipboard->formats(); per vedere tutto cio' che c'e' disponibile?



  • Ciao, prova ad aprire una immagine con KolourPaint ad esempio, a selezionare e copiare una parte di immagine.
    Nel form mi sono messo un pulsante. Lo clicco ed usando il tuo codice mi dice

    QXcbClipboardMime(0x55ea90503d20)
    Immagine

    A questo punto probabilmente devi lavorare sull'evento che stai usando suolla text edit.



  • allora, questa riga non funziona:

    qDebug() << clipboard->formats();
    

    mi dice che ‘class QClipboard’ has no member named ‘formats’.

    per quanto riguarda le immagini, le sto copiando dal filesystem.



  • Bé, se le copi dal filesistem è ovvio che hai solo il path.



  • @mrdebug said in QClipboard e immagini:

    Ciao, prova ad aprire una immagine con KolourPaint ad esempio, a selezionare e copiare una parte di immagine.
    Nel form mi sono messo un pulsante. Lo clicco ed usando il tuo codice mi dice

    QXcbClipboardMime(0x55ea90503d20)
    Immagine

    A questo punto probabilmente devi lavorare sull'evento che stai usando suolla text edit.

    si in effetti con il pulsante anche a me risulta una immagine (ho usato gimp).



  • @mrdebug si, sono io che non ho ben capito come funziona qclipaboard probabilmente!!



  • @fermatqt said in QClipboard e immagini:

    allora, questa riga non funziona:

    qDebug() << clipboard->formats();
    

    mi dice che ‘class QClipboard’ has no member named ‘formats’.

    scusa ho perso un pezzo: qDebug() << clipboard->mimeData()->formats();



  • ok, ho capito il funzionamento.
    grazie a entrambi!!


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.