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
-
@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 diceQXcbClipboardMime(0x55ea90503d20)
ImmagineA questo punto probabilmente devi lavorare sull'evento che stai usando suolla text edit.
-
@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 diceQXcbClipboardMime(0x55ea90503d20)
ImmagineA 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).
-
@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();