Ich entwickle ein Programm, das eine Farbe jedes Punktes auf einem 1024x1024 Bild mit einem speziellen Algorithmus berechnen muss. Die Farbe eines Punktes repräsentiert einen Wert. So ist jeder Punkt unabhängig von anderen Punkten und muss separat gezeichnet werden. Ich muss das Bild nicht zu oft aktualisieren. Eigentlich muss ich es nur einmal anzeigen.
Was ist der schnellste Ansatz zum Zeichnen separater Pixel in Qt?
Kann ich irgendeine Art von "Bildschirmspeicher" bekommen und das ganze Bild als ein Array von 4-Byte-Sätzen schreiben, die jedes Pixel als 4 Bytes in diesem Speicher darstellen?
Die Klasse QImage
ist für die Pixelbearbeitung optimiert. Sie können eine Instanz mit der erforderlichen Größe instanziieren und dann entweder die einzelnen Pixel setPixel
festlegen oder auf die Rohdaten zugreifen und sie über bits()
an Ort und Stelle manipulieren. Stellen Sie sicher, dass Sie das korrekte Format verwenden (z. B. RGBA-Werte oder Farbindizes für 8-Bit-Bilder)
Die schnellste Lösung könnte darin bestehen, ein QImage
zu erstellen, zu manipulieren ( setze die Pixel) und lass Qt dann zeichnen.
Die QImage-Klasse ist für schnelles IO, aus dem Handbuch:
Die QImage-Klasse bietet eine hardwareunabhängige Bilddarstellung, die direkten Zugriff auf die Pixeldaten ermöglicht und als Malwerkzeug verwendet werden kann.
Die QImage-Klasse unterstützt mehrere Bildformate, die in der Formataufzählung beschrieben werden. Dazu gehören monochrome, 8-Bit-, 32-Bit- und Alpha-Blended-Bilder, die in allen Versionen von Qt 4.x verfügbar sind.
Informationen zur Pixelbearbeitung finden Sie im Abschnitt Detaillierte Beschreibung.
Um es anzuzeigen, wäre es am einfachsten, es in eine Pixmap mit QPixmap::fromImage
umzuwandeln und es dann in ein Label mit QLabel::setPixmap
zu setzen.
Für mehr Kontrolle könnten Sie QWidget
unterteilen, paintEvent
überladen und QImage mit QPainter
mit QPainter::drawImage
zeichnen.
Sie könnten versuchen, ein OpenGL-Widget und das glDrawPixels Funktion.
Wenn Sie unter den erweiterten Einstellungen in Safari gehen und "Tab drücken, um jedes Element auf einer Webseite zu markieren" aktivieren, funktioniert es.
Wenn ich die Tabulatortaste gedrückt halte, werden nur die Formularelemente (wie %code% , %code% ) fokussiert, nicht jedoch die Anker-Tags.
Es funktionierte gut in Version 5.0.5. Dieses Verhalten wird in der neuesten Version 5.1.2 bemerkt.
Es gibt zwei Möglichkeiten für einen Benutzer, dies zu beheben.
1. Das wichtigste Problem besteht darin, die Eingabehilfen anzupassen. Apple Menü & gt; Systemeinstellungen & gt; Tastatur & gt; Shortcuts Tab & gt; Vollständiger Tastaturzugriff: Drücken Sie in Fenstern und Dialogen die Tabulatortaste, um den Tastaturfokus zwischen: zu verschieben. Wählen Sie das Optionsfeld Alle Steuerelemente . Dadurch können sowohl Safari als auch andere Anwendungen Tab-Fokus auf Schaltflächen und andere UI-Elemente erhalten.
2. Zusätzlich können Sie dies in den erweiterten Einstellungen von Safari anpassen, wie in j08691 beschrieben 's Antwort.