Seite 1 von 1

Bereich "aktivieren" nach Mausklick

Verfasst: 30. April 2008 08:43
von LinKinParKeR
Hallo liebe qtforum-Community,

folgendes hab ich bisjetz Programmiert

Code: Alles auswählen

#include "logik.h"

#include <qlabel.h>
#include <qpainter.h>
#include <kmainwindow.h>
#include <klocale.h>

#include <qevent.h>


logik::logik()
{
}
logik::~logik()
{
}


//Test
void logik::mousePressEvent ( QMouseEvent * e ) 
{ 
   QRect r( 0, 0, 500, 750 ); 
   if(r.contains(e->x(),e->y())) 
      isInside = true; 
   else 
      isInside = false; 
   update();//veranlasst das neuzeichnen der Oberfläche 
} 

void logik::paintEvent(QPaintEvent *e) 
{ 
   e->accept(); 
   QPainter painter( this ); 

   painter.setWindow( -2000, -1800, 3000, 2600 );

   painter.fillRect(0,0,width(),height(),QBrush(Qt::white));// Füllt den Hintergrund 
  if(isInside) 
     painter.fillRect(0,0,500,750,QBrush(Qt::yellow)); // Zeichnet gelbes rechteck 
  else 
     painter.fillRect(0,0,500,750,QBrush(Qt::blue)); // Zeichnet normales rechteck 
Wie Ihr seht möchte ich einfach ein Rechteck haben was wenn ich draufklicke seine Farbe ändert.
Nun bekomme ich bei e->accept(); eine Fehlermeldung:
logik.cpp:53: error: ‘class QPaintEvent’ has no member named ‘accept’
Nun wie deklariere ich jetz diesen accept bei mir? Hoffe jemand hat Antwort

MfG
LPer

Verfasst: 30. April 2008 08:50
von Christian81
Wenn QPaintEvent diese Funktion nicht hat - was soll sie tun bzw. warum brauchst Du sie?

Verfasst: 30. April 2008 09:01
von LinKinParKeR
Weiss leider nicht genau wovür dieses e->accept(); stehen soll, (habe diesen Tipp von jemandem bekommen) , aber wenn ich es weggebe ist es egal wo ich hinklicke und das Dreieck erhält die neue Farbe.

Wenn jemandem eine andere Lösung parat hat wäre das auch OK =)

Verfasst: 30. April 2008 09:01
von PeterLustig
Das wundert mich jetzt schon. Nach meiner Doku (4.4rc1) leitet QPaintEvent von QEvent ab, und QEvent hat eine public-Funktion namens "void accept ()".

Verfasst: 30. April 2008 09:05
von Christian81
PeterLustig hat geschrieben:Das wundert mich jetzt schon. Nach meiner Doku (4.4rc1) leitet QPaintEvent von QEvent ab, und QEvent hat eine public-Funktion namens "void accept ()".
Ja - mal wieder zu wenig Infos vom User - er benutzt wohl Qt3 (warum auch immer) ...

Und wenn man nicht weiß was ein Funktion macht sollte man sich einfach mal mit den Dingen beschäftigen anstatt es dumm zu benutzen... Dafür sind Tutorials usw. da. Einfach anfangen ist nicht wirklich sinnvoll (und Du wirst hier im Forum recht schnell auf Leute wie mich treffen die sowas gar nicht gutheißen)

Verfasst: 30. April 2008 09:08
von upsala
Ja, QPaintEvent sollte die Methode accept() haben, aber bei diesem Event kann man es weglassen.

Verfasst: 30. April 2008 09:23
von LinKinParKeR
@christian81

Richtig benutze anscheinend qt3

Kann mir schon vorstellen das Anfängerfragen nerven, ich versuche es auch zu verstehen nur wenn es eine Funktion gibt die eigentlich funktionieren sollte und dieses dann nicht tut ist das für einen Anfänger mal ein großes Problem. Ich versuche schon seit vielen Stunden dieses Problem zu lösen bevor ich diesen Eintrag gemacht habe.

Ich habe vorhin dieses geschrieben

Code: Alles auswählen

void button::mousePressEvent ( QMouseEvent * e ) 
{ 

    QRect r( 0, 0, 500, 750 ); 

       e->x(), e->y(); 
      // e->pos(); 

    if ( r.contains ( e->x(), e->y()) ) 

    { 
    QPainter paint( this ); 
    paint.fillRect ( 0, 0, 500, 750, yellow ); 
    }
Dies ging leider in die Hose weil anscheinend keine QPainter-Events im mousePressEvent richtig funktionieren, die folge war ein komplett gelbes Fenster =)

Dann habe ich diesen Tipp wie ganz oben schon gezeigt bekommen, nur bekomm ich eben diese Fehlermeldung.
Das Dreieick soll einfach seine Farbe ändern wenn ich draufklicke, wenn es eine für mich verständlichere Lösung die auch Funktioniert gibt wäre das optimal

Verfasst: 30. April 2008 09:29
von Christian81
Vielleicht sollte ich es nochmal sagen - wenn es kein accept() in Qt3 gibt, ist es auch nicht nötig (und wie macman sagte ist es auch in Qt4 nicht nötig). Beschäftige Dich mit den Grundlagen und wenn Du schon dabei bist nimm Qt4. Dein Code im ersten Post ohne das accept() sollte funktionieren. Das man außerhalb von paintEvent() nicht auf ein Widget zeichnen kann lernt man auch recht schnell in den Tutorials.

Mich nerven keine Anfängerfragen sondern die Idee der Leute einfach so mit etwas beginnen zu können ohne auch nur ein wenig Ahnung zu haben was man überhaupt macht. Warum gibt es Tutorials wenn sie keine anschaut? :(

Verfasst: 30. April 2008 09:42
von LinKinParKeR
Möchte jetz keine Grundsatzdiskussion anfangen jedoch sind natürlich Tutorials das A und O egal mit was man beginnen möchte. In meinem Fall möchte ich aber einfach nur das diese anscheinend nicht für Anfänger geeignete Idee zum laufen bringen. Es war halt der Gedanke etwas zu starten und wenn Probleme auftreten nach den Lösungen zu suchen, mit zugegeben wenig Grundkenntnissen. Wenn die Antwort ist "Lese das Tutorial" sehe ich das ein.


Wenn ich es ohne e->accept(); versuche funktioniert es nur mittelprächtig. Das Dreieck wird gelb wenn ich etwas daneben klicke und manchmal wieder blau wenn ich ins Dreieck klicke.
Woran liegt das? Koordinaten sind ja eigentlich richtig..

Verfasst: 30. April 2008 09:52
von Christian81
Debugger nehmen und nachschauen was passiert.