[gelöst] Probleme mit QPainter (QT4 & Windows)

Alles rund um die Programmierung mit Qt
Antworten
Dead_Byte
Beiträge: 5
Registriert: 22. September 2005 14:24

[gelöst] Probleme mit QPainter (QT4 & Windows)

Beitrag von Dead_Byte »

Hallo Leute :)

Ich hab mir auf meiner Win Kiste QT 4.0.1 draufgeworfen und versuch gerade den Umgang mit dem QPainter zu lernen.
Im Moment hab ich das kleine Problemchen, das trotz meinre Malerein ich nix angezeigt bekomme (weder mit QT 4.0.1 unter Win noch unter LINUX mit QT 3.3.x)

Ich hab mir den folgenden Spielzeugcode (QT4) zusammengebastelt:

/* Paint test */

#include <qapplication.h>
#include <qwidget.h>
#include <qpainter.h>

int main(int argc, char* * argv)
{
int my_rc = 0;
QApplication app(argc, argv);

/* Definiere die Haupt-GUI-Träger. . . . . . . . . . . . . . . . . . . . . . . .*/
QWidget* hauptfenster = new QWidget();
hauptfenster -> setGeometry(100, 100, 1024, 768);
hauptfenster -> setMinimumSize(1024, 768);
hauptfenster -> setMaximumSize(1024, 768);´

/* Mal ein wenig rum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
QPainter painter(hauptfenster);
painter.setPen(Qt::blue);
painter.drawRect(200, 200, 50, 50);
painter.drawPoint(100, 100);
painter.drawText(100, 400, "Hubba");
painter.end();

/* Nun zeige den ganzen Krempel an. . . . . . . . . . . . . . . . . . . . . */
hauptfenster -> show();
my_rc = app.exec();

delete hauptfenster;

return(my_rc);
}

Ich bekomme zwar mein Fenster angezeigt, aber die Malaktionen sind absolut nicht sichtbar.
Kann mir jemand den Bock zeigen, den ich da im code geschossen habe?
:)
kowi1134
Beiträge: 120
Registriert: 1. Mai 2005 17:48
Wohnort: Arnsberg

Beitrag von kowi1134 »

Hallo!

Versuche mal einen dicken Punkt an der Stelle (0,0) zu zeichnen. Wenn Du den siehst, kannst Du davon ausgehen, dass etwas mit dem QPainter zugrunde liegenden Koordinatensystem nicht stimmt.

Ciao
Dead_Byte
Beiträge: 5
Registriert: 22. September 2005 14:24

Beitrag von Dead_Byte »

Halole :)

Ich hab's ausprobiert, seh aber immer noch nichts :(
Kann es sein, das solche Malereien auf Widgets erst einmal gepuffert werden und man das redrawen auf dem Schirm manuell anstossen muss?
uhu01
Beiträge: 150
Registriert: 10. Juli 2005 20:46

Beitrag von uhu01 »

Hy!

Ich glaube das dein Fehler ist das du deine Zeichenaktionen nur einmal am Anfang ausführst. Wenn du das widget dann anzeigst wird QWidget::paintEvent(...) ausgeführt, d.h. über deine Sachen "drübergemalen" (eigentlich nicht, sind ja noch nicht "da")

Du musst das paintEvent deines QWidgets überladen, und dort einen QPainter(this) erstellen. Wenn du in den reinzeichnest kann man das ganze später auch noch sehen.

mfg
uhu01
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

eventuell hilft ein painter.end();
Dead_Byte
Beiträge: 5
Registriert: 22. September 2005 14:24

Beitrag von Dead_Byte »

Ne, das painter.end() hat ich schon ausprobiert, daran lag es nicht. Es lag tatsächlich am fehlenden paint event und noch ein paar andere kleinigkeiten.
Es ist doch immer wieder erstaunlich, wie etwas funktioniert, wenn man es nur richtig macht ;)

thx leuts
:)
autip
Beiträge: 14
Registriert: 24. Januar 2006 18:05

Beitrag von autip »

Ich habe das selbe Problem.

Kannst du mal den korrigierten Code posten?
Antworten