Seite 1 von 1

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

Verfasst: 22. September 2005 14:43
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?
:)

Verfasst: 22. September 2005 14:53
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

Verfasst: 22. September 2005 15:09
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?

Verfasst: 24. September 2005 17:00
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

Verfasst: 24. September 2005 18:49
von BartSimpson
eventuell hilft ein painter.end();

Verfasst: 26. September 2005 13:08
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
:)

Verfasst: 1. Februar 2006 13:54
von autip
Ich habe das selbe Problem.

Kannst du mal den korrigierten Code posten?