In meinem Programm können meine Benutzer eine Textfolge von überall kopieren und in mein Programm einfügen. Ich benutze die einfache QApplication::clipboard()->text();
Funktion und alles funktioniert wie erwartet. Aber einige meiner Benutzer haben Probleme, wenn unter Windows 8.1QClipboard kann keine Daten aus der Zwischenablage erhalten, wenn sie aus dem Editor kopiert wurden
hier kopieren und versuchen, ist, wie ich den Text in der Zwischenablage von meiner Paste-Funktion zugreifen:
QString clipboard = QApplication::clipboard()->text();
//check if the clipboard is empty
if(QApplication::clipboard()->text().isEmpty())
return;
//do something with clipboard
Aber wenn der Text aus dem Editor kopiert wurde oder Chrome, der Text ist IMMER leer. Windows 7 Benutzer hatten keine Probleme. Nicht alle Windows 8 Benutzer haben dieses Problem, es ist nur eine Handvoll, aber das Problem ist konsistent. Wenn Sie von anderen zufälligen Orten oder innerhalb meines Programms selbst kopieren, funktioniert die Zwischenablage gut.
Ich habe versucht mit mimeData
. Wenn Sie die Funktion formats()
verwenden, ist nur einfacher Text ein verfügbares Format, aber der Text ist immer leer.
Der Text, der von Notepad/Chrome kopiert wird, wird in Zwischenablage-Viewern und anderem gut angezeigt und kann woanders in anderen Programmen eingefügt werden.
Kopieren und Einfügen ist eine sehr wichtige Funktion in meinem Programm und es ist frustrierend, dass meine Benutzer nicht von Notepad oder Chrome kopieren und einfügen können.
Irgendwelche Ideen? Vielen Dank für Ihre Zeit. :)
EDIT: Ich versuchte mit der "Windows" -Stil-Technik. Es gab keine Veränderung. Hier ist meine aktuelle, noch unworking Code:
QString clipboard = QApplication::clipboard()->text();
//check if the clipboard is empty
if(clipboard.isEmpty())
{
//might not actually be empty. Check using the other technique
if (IsClipboardFormatAvailable(CF_TEXT) && OpenClipboard(NULL))
{
HGLOBAL hGlobal = GetClipboardData(CF_TEXT) ;//hGlobal is NULL
if (hGlobal != NULL)//This never gets called because it is NULL
{
LPTSTR lpszData = (LPTSTR) GlobalLock(hGlobal) ;
if (lpszData != NULL)
{
clipboard.fromLocal8Bit((const char *)lpszData);
GlobalUnlock(hGlobal) ;
}
}
CloseClipboard() ;
}
if(clipboard.isEmpty())
return;
}
Der kopierte Text zeigt sich fein in eine Zwischenablage-Viewer, aber mein Programm kann nicht egal um es zu bekommen, was:
Wie kommt GetClipboardData () hebt nichts auf? Auch hier kann der kopierte Text in irgendein anderes Programm eingefügt werden, das ich ausprobiert habe ... einfach nicht von mir. Aber wenn es von woanders kopiert wird, ist das kein Problem.
zuerst beseitigen die Möglichkeit, dass Windows 8.1 den Zugriff auf die Zwischenablage beschränkt.Kopieren Sie von der problematischen Quelle in ein anderes Programm. – UmNyobe
Sicher. Ich wollte nur hinzufügen, dass die einzigen Benutzer, die dieses Problem hatten, Windows 8.1 und ich habe noch nie gehört, dass es auf einem anderen Betriebssystem passiert. Ich bin mir seiner Bedeutung nicht sicher, aber ich dachte, ich würde es trotzdem hinzufügen. – mrg95
"Der Text, der von Notepad/Chrome kopiert wird, wird in Zwischenablage-Viewern und anderen Objekten angezeigt und kann an anderer Stelle in andere Programme eingefügt werden." – mrg95