2016-10-14 3 views
1

ich ein Tool mich schreibe, die einen großen kundenspezifische Textbereich-Widget und viele anderen Texteingabe Widgets hat usw. ich derzeit mit dem Hinzufügen von copy/paste mir arbeite meinen tool und blieb dabei hängen, wie dies auf globaler Ebene funktioniert - dh ich möchte das Kopieren/Einfügen nicht lokal in jedem Widget implementieren, das es benötigt. Für Qt-Standard-Widgets funktioniert es einfach, Kopieren/Einfügen mit Strg + C/Strg + V, aber natürlich muss ich es manuell für meine benutzerdefinierten Widgets implementieren.PyQt: Globale copy/paste Aktionen für eigene Widgets

Aber was Kopieren/Einfügen Aktionen in der Menüleiste? Muss ich sie mit jedem Widget in meinem Programm verbinden, oder gibt es dafür eine bessere Möglichkeit? Ich würde es vorziehen, wenn ich die Menüaktionen einfach mit einem globalen Copy/Paste-Handler verbinden könnte, der das Widget im Fokus automatisch benachrichtigt.

+1

Warum müssen Sie Kopieren/Einfügen neu implementieren? Sicherlich sind Ihre benutzerdefinierten Widgets nur Unterklassen von Qt-Texteingabe-Widgets. – ekhumoro

+0

Nein, leider ist mein Widget aus Leistungsgründen eine erweiterte QAbstractScrollArea. Ich rendere die Inhalte selbst, um extrem große Datenmengen anzeigen zu können. Und diese Komponente unterstützt, soweit ich weiß, das Kopieren/Einfügen nicht. – UglyBob

Antwort

0

Es gibt keine allgemeine Copy/Paste-Funktionalität - für eigene Widgets finden Sie alles selbst implementieren müssen. Die Klasse QClipboard bietet Zugriff auf die Systemzwischenablage. Jede Anwendung verfügt über ein einzelnes Zwischenablageobjekt, auf das über QApplication.clipboard() oder qApp.clipboard() zugegriffen werden kann.

Die Standard Qt Input Widgets definieren alle ihre eigenen copy() und paste() Slots, die an Menüaktionen, Symbolleistenschaltflächen, Tastaturkürzel usw. angeschlossen werden können. So sollten Ihre benutzerdefinierten Widgets wahrscheinlich die gleiche Schnittstelle definieren.

Es gibt Klassen wie QActionGroup, QButtonGroup und QSignalMapper, die Unterstützung für die zentrale Signalverarbeitung bieten, aber es ist oft viel einfacher zu halten mit expliziten, Eins-zu-eins-Verbindungen.