Bool Wert im QTextStream abspeichern

Alles rund um die Programmierung mit Qt
Antworten
Denian
Beiträge: 4
Registriert: 15. September 2004 12:43
Kontaktdaten:

Bool Wert im QTextStream abspeichern

Beitrag von Denian »

Hallo,

ich hoffe Ihr könnt mir helfen.
Ich versuche bei einem kleinen Programm die aktuellen Werte meines Main Widgets abzuspeichern, um sie nach neustarten des Programms wieder einzulesen. Soweit so gut, das Einlesen von Slider-Parametern und Textfeldern klappt einwandfrei. Jetzt sind noch 2 Button Groups mit jeweils 2 Buttons hinzugekommen. Diese Bool-Werte möchte ich auch abspeichern, jedoch scheitere ich am QTextStream und den Bool-Werten der QRadioButtons. Ich dachte es mir folgendermaßen:

Code: Alles auswählen

 
...
 if ( file.open( IO_WriteOnly ) ) 
        {
            QTextStream stream( &file );
           
                stream  <<        
         slider1->value() << " " <<
         slider2->value() << " " <<
			slider3->value() << " " <<
			lineEdit1->text() << " " <<
			lineEdit2->text() << " " <<
			lineEdit3->text() << " " <<
			radioButton1->checked() << " " <<
			radioButton2->checked() << " " <<
			radioButton5->checked() << " " <<
			radioButton6->checked() << " " <<endl;
            file.close();
            setCaption( QString( "Wertetabelle -- %1" ).arg( m_filename ) );
                       
        }
"checked()" klappt genau so wenig wie "isChecked()".
Ich habe schon radioButton1->text() ausprobiert, da gibt er mir beim Abspeichern in die Datei den Text meines Radio-Buttons aus was nur leider falsch ist. Ich möchte gerne das das Porgramm mir TRUE bzw. FALSE abspeichert oder 1 und 0 je nachdem welcher RadioButton ausgewählt wurde.

Wenn ich "isChecked()" nehme bekomme ich folgende Fehlermeldung:

"mainwindow.ui.h:56: Ambiguity between 'QTextStream::operator <<(char)' and 'QTextStream::operator <<(short)' in function form1::fileSave()"

Könnt Ihr mir vielleicht bei meinem Problem weiterhelfen? Ich wäre sehr Dankbar.

Ciao

Denian[/code]
ICQ 6748720
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

QTextStream hat kein operator <<(bool), also:

QTextStream ts;

ts << (int)isChecked();
pm_Snake
Beiträge: 86
Registriert: 7. September 2004 11:33

Beitrag von pm_Snake »

Oder, um es besser zu verstehen fragst du isChecked ab, bei true schreibst du 1 raus, bei false 0

Das gleiche macht aber auch (int)isChecked()
>>[-]>[-]>[-]>[-]<<<<<[->>+<-[>>>]>[[<+>-]>+>>]<<<<<]
Denian
Beiträge: 4
Registriert: 15. September 2004 12:43
Kontaktdaten:

Beitrag von Denian »

Wunderbar,

danke für die schnelle Antwort.

Code: Alles auswählen

(int)radioButton1->isChecked() << " " <<
Jetzt gibt er mir für einen gesetzten Button eine 1 und für einen nichtgesetzten Button eine 0 in der Datei wieder.

Naja, die nächste Frage ist jetzt wie mache ich aus der 1 ein true und aus der 0 ein false, damit beim Einlesen der Daten ich mit
radioButton1->setChecked(var1); den Button auf TRUE bzw. FALSE setzen kann?

MfG

Denian
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

da brauchste nix weiter tun. Lies einfach ein Integer aus und übergib es an die setChecked(). das wird schon gehen.
pm_Snake
Beiträge: 86
Registriert: 7. September 2004 11:33

Beitrag von pm_Snake »

Probier mal setChecked( (bool)var1 );

bin mir aber nicht sicher
sonst probierst es mit

bool zustand;
if( var1 == 1 )
zustand = true;
if( var1 == 0 )
zustand = false;

müsste auch gehen

if( var1 )
zustand = true;
else
zustand = false;

edit:
oder eben mal so probieren wie mein vorredner sagte. wäre die schönste lösung
>>[-]>[-]>[-]>[-]<<<<<[->>+<-[>>>]>[[<+>-]>+>>]<<<<<]
Denian
Beiträge: 4
Registriert: 15. September 2004 12:43
Kontaktdaten:

Beitrag von Denian »

Hallo,

irgendwie klappen die Lösungen nicht. Ich habe mir jetzt überlegt, dass ich ja zwei Button Groups habe. Die Radiobuttons sind ja in ihrer Button Group als exclusive gesetzt. Wenn ich jetzt nur den ersten Button jeder Gruppe abfrage und dann eine "if" Anweisung draus mache sollte es doch eigentlich klappen. Macht es aber irgendwie nicht. :(

Code: Alles auswählen

bool zustand1; 
if( fun1 == 1 ) 
zustand1 = true; 
if( fun1 == 0 ) 
zustand1 = false; 

radioButton1->setChecked(zustand1);
    if(radioButton1->isChecked())
	radioButton2->setChecked(true);
Ich muss dann allerdings bei der "if" Abfrage ein "false" abfragen. Mit isChecked() frage ich aber ein true ab. Gibt es für mein Problem eine Lösung?

Ciao

Denian[/b]
pm_Snake
Beiträge: 86
Registriert: 7. September 2004 11:33

Beitrag von pm_Snake »

Ja, gibt es

if( xxx->setChecked() )
// wenn setchecked true ist, macht er diese anweisung;

if( !xxx->setChecked() )
// wenn setchecked false ist, macht er diese anweisung;

ein ! bedeutet in den meisten fällen NICHT

also if( NICHTxxx-> )

genauso kannst auch fragen if ( var != 1 )

( IST NICHT )
>>[-]>[-]>[-]>[-]<<<<<[->>+<-[>>>]>[[<+>-]>+>>]<<<<<]
Denian
Beiträge: 4
Registriert: 15. September 2004 12:43
Kontaktdaten:

Beitrag von Denian »

Juhu, es klappt!!!

Code: Alles auswählen

//Danke für den Tipp pm_Snake)
   bool zustand1; 
if( fun1 == 1 ) 
   zustand1 = true;
   if( fun1 == 0 ) 
zustand1 = false; 
   
  radioButton1->setChecked(zustand1);
    if(zustand1==false)
	radioButton2->setChecked(true);
So, jetzt bin ich erstmal wunschlos glücklich.

Großer Dank nochmal an pm_Snake und lepsai für die schnellen Denkanstöße.

Ciao

Denian
pm_Snake
Beiträge: 86
Registriert: 7. September 2004 11:33

Beitrag von pm_Snake »

Du könntest auch:

radioButton1->setChecked( zustand1 ); // wert von zustand 1
radioButton2->setChecked( !zustand1 ); // NICHT der wert von zustand 1 -> demnach statt true ein false, statt false ein true etc

dadurch sparst du dir eine anweisung und der Code wird lesbarer...
>>[-]>[-]>[-]>[-]<<<<<[->>+<-[>>>]>[[<+>-]>+>>]<<<<<]
monte
Beiträge: 24
Registriert: 28. August 2004 17:04
Wohnort: Wiswiel
Kontaktdaten:

Beitrag von monte »

In dem zusammenhang Anwendungseinstellungen speichern
kann man sich auch mal die Klasse QSettings ansehen.
Antworten