Bereich "aktivieren" nach Mausklick

Alles rund um die Programmierung mit Qt
Antworten
LinKinParKeR
Beiträge: 4
Registriert: 28. April 2008 13:07

Bereich "aktivieren" nach Mausklick

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn QPaintEvent diese Funktion nicht hat - was soll sie tun bzw. warum brauchst Du sie?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
LinKinParKeR
Beiträge: 4
Registriert: 28. April 2008 13:07

Beitrag 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 =)
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag 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 ()".
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ja, QPaintEvent sollte die Methode accept() haben, aber bei diesem Event kann man es weglassen.
LinKinParKeR
Beiträge: 4
Registriert: 28. April 2008 13:07

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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? :(
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
LinKinParKeR
Beiträge: 4
Registriert: 28. April 2008 13:07

Beitrag 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..
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Debugger nehmen und nachschauen was passiert.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten