Seite 1 von 1

Bool Wert im QTextStream abspeichern

Verfasst: 15. September 2004 13:03
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

Verfasst: 15. September 2004 13:24
von lepsai
QTextStream hat kein operator <<(bool), also:

QTextStream ts;

ts << (int)isChecked();

Verfasst: 15. September 2004 13:40
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()

Verfasst: 15. September 2004 13:44
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

Verfasst: 15. September 2004 13:46
von lepsai
da brauchste nix weiter tun. Lies einfach ein Integer aus und übergib es an die setChecked(). das wird schon gehen.

Verfasst: 15. September 2004 13:47
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

Verfasst: 15. September 2004 14:54
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]

Verfasst: 15. September 2004 15:14
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 )

Verfasst: 15. September 2004 15:17
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

Verfasst: 15. September 2004 15:26
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...

Verfasst: 15. September 2004 17:54
von monte
In dem zusammenhang Anwendungseinstellungen speichern
kann man sich auch mal die Klasse QSettings ansehen.