www.mikrocontroller.net

Forum: PC-Programmierung Zeichnen mit Cairo unter GTK


Autor: Dominik W. (absurdum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muss für mein Studium ein kleines GUI schreiben, in dem ich einen 
empfangenen Wert mittels Balkenanzeige darstellen will.
Ich habe mir eine Funktion geschrieben, welche mir mit Cairo die 
Balkenanzeige je nach Übergabewert zeichnet.
Jetzt steh ich vor dem Problem, dass ich die Anzeige bei Wertänderung 
aktualisieren will. Wie geht das?
Hab jetzt lange gegoogelt und außer der Funktion "queue_draw()" nichts 
gefunden. Die Funktion hört sich ja viel versprechend an, nur find ich 
kein Example, wie man sie einsetzt.

Kann mir dabei jemand helfen?

Autor: Simon Budig (nomis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dominik W. schrieb:
> Hab jetzt lange gegoogelt und außer der Funktion "queue_draw()" nichts
> gefunden. Die Funktion hört sich ja viel versprechend an, nur find ich
> kein Example, wie man sie einsetzt.
>
> Kann mir dabei jemand helfen?

Deine Malfunktion sollte an das "expose-event" signal connected werden. 
Dann wird sie immer aufgerufen, wenn ein Bereich des Widgets 
wiederhergestellt werden muss.

Mit queue_draw() wird dann einfach ein neuer expose-event für die 
gesamte Widget-Fläche eingequeued und beim Durchlaufen der Mainloop 
abgearbeitet (d.h. deine Malfunktion wird aufgerufen).

Viele Grüße,
        Simon

Autor: Dominik W. (absurdum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie verwendet man queue_draw() im Code?
Habe vor zwei Tagen mit GTK und gestern mit Cairo angefangen, kenn mich 
daher noch nicht wirklich gut aus.

Autor: Simon Budig (nomis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dominik W. schrieb:
> Wie verwendet man queue_draw() im Code?
> Habe vor zwei Tagen mit GTK und gestern mit Cairo angefangen, kenn mich
> daher noch nicht wirklich gut aus.

Ich habe im Moment nur ein Python-Beispiel parat, das kannst Du unter 
http://www.home.unix-ag.org/simon/files/bahnhofsuhr.py runterladen und 
angucken. Wichtig ist hier, dass die "update_time" Funktion immer wieder 
mal aufgerufen wird und eigentlich nichts weiter macht, als eben das 
queue_draw(). Die Uhrzeigerposition, an die der Zeiger letztlich gemalt 
werden soll, wird dann im expose-handler bestimmt.

In C ist das ganze etwas lästiger, weil C keine bequeme Syntax für 
Methodenaufrufe hat. Da sieht das dann etwa so aus:

gtk_widget_queue_draw (GTK_WIDGET (mywidget));

Je nach Datentyp kann man sich das Typechecking-Cast-Makro 
("GTK_WIDGET()") auch schenken.

Viele Grüße,
        Simon

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Dominik W.

Ich hatte angefangen mit

http://zetcode.com/tutorials/cairographicstutorial/

Autor: Dominik W. (absurdum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie es der Zufall so will bin ich gerade auf diese Tutorial gestossen.
Mein Fehler war, dass die Funktion gtk_widget_queue_draw(widget); heißt.
Manchmal hilft es wirklich eine Nacht drüber zu schlafen.

Aber recht herzlichen Dank!

Autor: KidMoritz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das koennte dir evtl weiterhelfen.
Bin heute damit fertig geworden.
Es ist eine Anzeige mit Zeiger.
Der Zeiger bewegt sich, wenn sich der Wert aendert.
In meiner App laeuft der Zeiger aber nur in eine Richtung - wenn der 
Wert groesser wird.

http://www.mikrocontroller.net/attachment/highlight/96884

Gruesse KidMoritz

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.