kleines prob!

Alles rund um die Programmierung mit Qt
Antworten
KuhTee;
Beiträge: 12
Registriert: 13. Oktober 2004 10:49

kleines prob!

Beitrag von KuhTee; »

Hallo!

Mein Problem:

Es gibt zwei Slider. Jeweils für beide Slider gibt es eine Funktion die sich eines prewiew Bildes bedient. Da ich noch nicht so der Crack bin, weiss ich nicht wie ich es anstelle, dass ein verändertes prewiew Bild der anderen Funktion mitgegeben wird damit es nicht nach jedem wechsel das alte unveränderte Bild genommen wird. Hier etwas Code:

Die beiden connections der Slider:

Code: Alles auswählen

        connect(Ctrl_1, SIGNAL(valueChanged(int)),
                this, SLOT(funktion_1(int)));

        connect(Ctrl_2, SIGNAL(valueChanged(int)),
                this, SLOT(funktion_2(int)));

Und hier eine der beiden Funktion (identisch bis auf funktions- var namen)

Code: Alles auswählen

void
Dialog::funktion_1(int value)
{

    static int working = 0;
    if (working++) {
      --working;
      return; 
    }

    if (value < sliderMin || sliderMax < value)
      return;
    
    myBrightness = value;
    QImage preview;

    if (value > 0)
        preview = imageManip.lighten(myPreviewImage, calcFactor(value));
 
    else if (value == 0)
        preview = myPreviewImage;
    
    else
        preview = imageManip.darken(myPreviewImage, calcFactor(-value));
    
    myPreviewPixmap = QPixmap(preview);
    myPreviewLabel->setPixmap(myPreviewPixmap);

    --working;
}

myPreiwievImage ist in dem Fall das Image das aufgerufen wird, ohne zu berücksichtigen ob es schonmal verändert wurde oder nicht.

habt ihr ne Idee??

Vielen Dank im Voraus,

KuhTeE!
"I didn't do it!"

-Bart Simpson
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

Hallo

Ich würde ein neues Image erzeugen welches das geänderte
Bild enthält und einen Bool der gesetzt wird wenn das orginal Bild das erstemal geändert wird. danach arbeitest du nur noch auf dem geänderten Bild.

gruß gandalf
benutzte QT 3.2 nc auf w2k
KuhTee;
Beiträge: 12
Registriert: 13. Oktober 2004 10:49

Beitrag von KuhTee; »

Hi Gandalf, danke für deine schnelle Antwort!

Genau soetwas habe ich mir auch schon gedacht, aber es wäre super nett wenn du mir einen kleines schnippser Code dalassen könntest, damit ich besser verstehe wie genau sowas aussehen könnte.



Danke! und beste Grüße,


KuHTEE!
"I didn't do it!"

-Bart Simpson
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

ok

definier in deiner .h

Code: Alles auswählen

QImage _orgImage;  // im Konstruktor
QImage _changeImage;

bool _bImageChanged;
(ich benutze benutze de "_" vor dem Varnamen damit man sieht das die Var global ist
b vor nem Varname für bool, n für int, s für string, etc

erleichtert später das wiedererkennen deiner Var im Quellcode


in deiner cpp;

Code: Alles auswählen

_orgImage.load("bildpfad"); 
_bImageChanged = false;

void Dialog::funktion_1(int value) 
{ 

    static int working = 0; 
    if (working++) { 
      --working; 
      return; 
    } 

    if (value < sliderMin || sliderMax < value) 
      return; 
    
    myBrightness = value; 
  //    QImage preview; 

    if ( !_bImageChanged)
    {
      if (value > 0 )
      {
        _changedImage = imageManip.lighten(myPreviewImage, calcFactor(value)); 
      }else if (value == 0)
	{
          _changedImage = myPreviewImage; 
	}else
	  { 
          _changedImage = imageManip.darken(myPreviewImage, calcFactor(-value));
	  }
      _bImageChanged= true;
    }else
      {
if (value > 0 )
      {
        _changedImage = imageManip.lighten(_changedImage, calcFactor(value)); 
      }else if (value == 0)
	{ 
	  // nichts zu tun
	}else
	  { 
          _changedImage = imageManip.darken(_changedImage, calcFactor(-value));
	  }
      _bImageChanged= true;
      }
    
    myPreviewPixmap = QPixmap(_changedImage); 
    myPreviewLabel->setPixmap(myPreviewPixmap); 

    --working; 
} 

ggf mußt du zwei _imagedChanged erzeugen also _imageChange1 etc, falls die auf verschiedenen Bildern arbeiten

falls da fehler drin sind sorry hab auf der Arbeit kein QT installiert :-)
gruß Michael
benutzte QT 3.2 nc auf w2k
KuhTee;
Beiträge: 12
Registriert: 13. Oktober 2004 10:49

Beitrag von KuhTee; »

Hallo,

Also erstmal ein großes Danke, denn sieht alles logisch aus!
Problem an der Sache ist die andere Funktion, auch wissen muss ob das Bild schon verändert wurde oder nicht. Also muss das Bild bei einem "_changedImage = true" das veränderte Bild aus der anderen Funktion nehmen und weiterbearbeiten.


Und da bin ich total ratlos. :?
"I didn't do it!"

-Bart Simpson
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

wenn du die andere Funktion genauso baust wie die erste und das bild mit der ersten verändert wurde ist _bImageChanged immer noch true und er wird automatisch mit dem veränderten Bild weiter machen

das liegt an der globalen Haltung der Daten.

du must dir halt noch überlegen wann du diese Variable wieder auf false setzt, z.b wenn du ein neues Bild lädts etc.

gandalf
benutzte QT 3.2 nc auf w2k
KuhTee;
Beiträge: 12
Registriert: 13. Oktober 2004 10:49

Beitrag von KuhTee; »

Hallo!

Hm komisch, ich habe die variable "bool bImageChanged" in der .h deklariert, aber bei der definition in der cpp sagt er mir "warning: ISO C++ forbids declaration of `bImageChanged' with no type"


???
"I didn't do it!"

-Bart Simpson
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

hast du sie in der .h mit Unterstrich und in der cpp ohne??

gandlf
benutzte QT 3.2 nc auf w2k
KuhTee;
Beiträge: 12
Registriert: 13. Oktober 2004 10:49

Beitrag von KuhTee; »

Hi,


Nein, ich wollte mich eigentlich an meine eigenen konventionen halten aber sollte es unbenutzte oder nicht deklarierte variablen geben würde er mir das ja auch sagen.


Gruß,


die Tee Kuh
"I didn't do it!"

-Bart Simpson
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

zeig bitte deine cpp und deine h meinetwegen schick sie als zip falls sie zu lang ist

michael.kamsties@mail.informatik.uni-oldenburg.de
benutzte QT 3.2 nc auf w2k
KuhTee;
Beiträge: 12
Registriert: 13. Oktober 2004 10:49

Beitrag von KuhTee; »

Hey noch ein Oldenburger ;)

Naja ich kann dir die nicht ganz schicken, aber ich versuch dir nen paar relevante auszüge zu geben. ;-)


Danke!


KuhTee:>
"I didn't do it!"

-Bart Simpson
KuhTee;
Beiträge: 12
Registriert: 13. Oktober 2004 10:49

Beitrag von KuhTee; »

angekommen?
"I didn't do it!"

-Bart Simpson
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

seh grad hab mich bei der EMail versehen :-(

muß heißen

michael.kamsties@mail.uni-oldenburg.de

hab zwei Email-Adressen der UNI gemischt

gandalf
benutzte QT 3.2 nc auf w2k
KuhTee;
Beiträge: 12
Registriert: 13. Oktober 2004 10:49

Beitrag von KuhTee; »

k, is raus :>
"I didn't do it!"

-Bart Simpson
gandalf
Beiträge: 39
Registriert: 31. August 2004 17:00
Wohnort: Varel
Kontaktdaten:

Beitrag von gandalf »

und angekommen

du hast den bool außerhalb des Konstruktors aufgerufen, deshalb kann er nicht zugewiesen werden. du mußt ihn schon inerhalb des konstruktors, destuktors oder einer XXBrightnessDialog-Methode benutzen sonst wird er als global erkannt also neudefinition außerhalb der Klasse und dann kennt er die Varibale nicht deswegen dein Fehler

schieb sie einfach drei zeilen höher

Gruß gandalf
benutzte QT 3.2 nc auf w2k
Antworten