PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Konfigurationsdateien



ChMaster|LFreak
06-07-2004, 21:28
Hallo zusammen :D

mein xml problem habe ich gelöst, danke noch mal an die die mir geholfen haben.

nun zu meinem anderem problem.

Ich schreibe gerade ein Tool womit man eine config datei erstellen kann.
und diese auch wieder auslesen kann, dazu wird auch ein profil erstellt
womit es möglich ist verschieden config dateien anzulegen mit unter
schiedlichen config (config datei heisst so wie das profil) namen. jedoch
haben die config dateien den gleichen inhalt, aber andere werte.

ich habe kconfig benutzt, aber dafür ist es nicht geeignet, glaube ich.

wie stelle ich dies am besten an.

(ich bräuchte da wirklich dringend hilfe)

die konfig datei soll folgendes format haben:
[text]

blablaba=text
blablalla=false

[text 2]

blablaba=text
blablalla=false

.......
usw.

Ps.:

es werden comboboxen, checkboxen, lcdnumbers,
textedits, linedits und sliders benutz. Wenn einer
soviel erfahrung hat trifft er mich im ICQ.
BITTE helft mir, es ist wichtig für mich.

Meine ICQ Nr.: 319106139

tuxipuxi
07-07-2004, 13:31
Wieso ist KConfig dafür die falsche Klasse? KConfig speichert boolsche Werte, int Werte usw., genau das was du brauchst um slider und checkbox werte abzuspeichern.
Wie das Format intern aussieht ist für dich unbedeutend weil du die Werte mit KConfig wieder auslesen kannst.

Michael.

ChMaster|LFreak
08-07-2004, 11:28
stimmt ich habe es zu spät bemerkt bzw. habe es durch ein anderes Projekt gesehen wie es funktioniert dazu muss ich nur in der
cppdatei:


KConfig *config(kapp->config());
if ( ListBox_GameProfile->currentText() )
{
config = new KConfig( "test_" + ListBox_GameProfile->currentText() + ".conf" );
........
}


damit setze ich die unterschiedlichen profile namen.

aber nun zum anderen problem, ich habe nun den ersten
dialog mit der listbox und dem button, wenn ich den button
drück oeffnet sich der 2 dialog mit einem textfeld und 2 buttons
(ok u. abort) wenn ich in das textfeld einen text eingebe und
auf ok drücke soll er den text in die listbox des ersten dialog
übernehmen. wie bekomm ich es hin?

Gruß
Alexander

anda_skoa
08-07-2004, 15:47
Du machst den zweiten Dialog zu einem modalen Dialog und startest ihn aus dem ersten mit exec().

Wenn exec() zurückkehrt, kannst du über Methoden weiter auf den zweiten Dialog zugreifen, also zB auslesen, was im LineEdit steht.

Ciao,
_

ChMaster|LFreak
08-07-2004, 16:44
ok, ich habe noch nie mit exec() gearbeitet, wie geht das?
sorry für die dumme frage :rolleyes:

ich mache es so:

(erster Dialog)


#include "test.h"
#include "profile.h"

void Test::slot_Add_GameProfile()
{
Profile *p = new Profile();
ListBox_GameProfile->insertItem( p->LineEdit_ProfileName->text() );
p->show();
}


damit ruft er den 2 dialog auf, soweit so gut:

(zeiter Dialog)


#include "test.h"
#include "profile.h"

void Profile::slot_Ok()
{
Test *t= new Test();
if ( LineEdit_ProfileName->text().isEmpty() )
{
KMessageBox::information( this, "Please enter you Profile name!" );
}
else
{
t->ListBox_GameProfile->insertItem( LineEdit_ProfileName->text() );
this->close();
}
}


wenn ich im text feld was eingebe und ok klicke macht er es aber
in der Listbox ist zwar ein eintrag vorhanden, aber er ist leer, also kein text. ????

anda_skoa
08-07-2004, 20:04
void Test::slot_Add_GameProfile()
{
Profile p(this);
if (p.exec() == QDialog::Accepted)
{
ListBox_GameProfile->insertItem(p.LineEdit_ProfileName->text() );
}
}




// Standardslot accept() statt eigenem Slot
// mit OK Verbinden
void Profile::accept()
{
Test *t= new Test();
if ( LineEdit_ProfileName->text().isEmpty() )
{
KMessageBox::information( this, "Please enter you Profile name!" );
}
else
{
QDialog::accept();
}
}


Cancel/Abort Button mit Standardslot reject() verbinden.


Ciao,
_

ChMaster|LFreak
08-07-2004, 20:40
danke, es funktioniert :D

währest du eine frau würd ich dich küssen :p

Gruß
Alexander

ChMaster|LFreak
08-07-2004, 23:08
die einträge die in der ListBox sind sollen in eine datei geschrieben werden, ich weiss auch wie es geht,



QStringList sList;
for( unsigned int i = 0; i < ListBox_GameProfile->count(); i++ )
{
sList.append( ListBox_GameProfile->item( i )->text() );
}

config = new KConfig( "game_profile.dbfe");
config->setGroup( "Game Profil" );
config->writeEntry( "Games", sList );

config->sync();


aber erschreibt mir es hintereinander. also:

[Game Profil]
Games = blabla, blabla

das kann ich nicht gebrauchen, er soll es mir unter einander schreiben
und da ist das probelm? er soll es so:

[Game Profil]
Games_0 = blabla
Games_1 = blabla

usw. machen

denn wenn ich es auslesen will schreibt er mir es genauso in die ListBox:
und beim auslesen soll er es genaus so machen.



KConfig *config( kapp->config() );
config = new KConfig( "game_profile.dbfe" );
config->setGroup( "Game Profil" );
ListBox_GameProfile->insertItem( config->readEntry( "Games", ListBox_GameProfile->currentText() ) );


Gruß
Alexander

tuxipuxi
08-07-2004, 23:26
1. Die Anordnung der Strings in der Config Datei hat für dich _keinerlei_ Relevanz, da die KConfig Klasse das Auslesen übernimmt(in diesem Fall wäre es nur interessant für dich wenn in einem String ein "," vorkommt und damit den Separator benutzen würdest.)

2. Du speicherst eine QStringList und liest einen QString aus, das kann zwangsläufig nur einen QString zurückgeben(siehe Funktionsdeklaration, return type ist QString).
Ausserdem erwartet insertItem einen QString und keine QStringList.

Also musst du readListEntry statt readEntry und insertStringList statt insertItem machen.

Michael.

ChMaster|LFreak
08-07-2004, 23:49
ok , entweder bin ich zu dumm :( oder ich komm nicht darauf wie es geht.

ein bsp. währe sehr hilfreich? ( büdde :D )

Gruß
Alexander

tuxipuxi
08-07-2004, 23:55
Ich habe es doch schon geschrieben?


Also musst du readListEntry statt readEntry und insertStringList statt insertItem machen.

Michael.

ChMaster|LFreak
09-07-2004, 00:01
erschreibt es mir so in die config

[Game Profile]
Games=Test1,Test2

----------------------
stimmt hast du, aber esfunktioniert nicht



ListBox_GameProfile->insertStringList( config->readListEntry( "Games", ListBox_GameProfile->currentText() ) );


ich bin wirklich blöd?????? ich weis nich weider :(

tuxipuxi
09-07-2004, 00:05
Wenn du einen Blick auf die Funktionsbeschreibung von writeEntry( http://api.kde.org/3.2-api/kdecore/html/classKConfigBase.html#a60 ) wirfst, siehst du, dass es einen separator parameter gibt. Du schreibst deine items einfach ohne separator hintereinander in die Liste, das kann nicht funktionieren.

Michael.

ChMaster|LFreak
09-07-2004, 00:20
ok, hat funktioniert,
und danke noch mals für die kopfnuss, die habe ich gebraucht , danke :D

ich stand wirklich auf dem schlau, hiermit endschuldige ich mich bei dir
so um zu zeigen des es funktioniert hier der code:

1. zum lesen


ListBox_GameProfile->insertStringList( config->readListEntry( "Games", ':' ));


2. zum schreiben


config->writeEntry( "Games", sList,':' );


gruß
Alexander

ChMaster|LFreak
09-07-2004, 13:33
in der list box stehen nun die einträge.
die werden ja mit seperraten namen gespeichert.
( also unterschiedliche configdateien )

nun versuch ich diese seperaten config dateien mit einem bestimmten
programm zu starten, das klappt ja auch, aber .....

wenn ich nun den ersten eintrag anklicke und drücke auf start (button)
führt er auch das programm mit der entsprechenden config aus.
wenn ich das seperate programm wieder schliesse und einen anderen
eintrag auswähle startet er mit der erst ausgewählten config (also dem
ersten eintrag in der ListBox).

wenn ich mein programm (tool) schliesse und wieder starte und dann den
anderen eintrag auswähle funktioniert es. wenn ich aber wieder den ersten
eintrag der listbox wähle startet das seperate programm immer noch mit
dem 2 eintrag der listbox. :confused:

hier nun der start code: QDir::homeDirPath() setze ich immer
vorsichtshalber



if( ListBox_GameProfile->currentText() )
{
db_start = new QProcess( this );

QString db_dir;
db_dir = QDir::homeDirPath();
db_dir.append( "/.kde/share/config/dosbox_" + ListBox_GameProfile->currentText() + ".conf" );

db_with_config.append( "dosbox" );
db_with_config.append( "-conf" );
db_with_config.append( db_dir );

db_start->setArguments( db_with_config );
db_start->start();

connect( db_start, SIGNAL( readyReadStdout() ), this, SLOT( slot_ReadStdout_DosBox() ) );
}


hier nun der lese code um zu sehen ob er auch di andere config startet:



QString db_output;

while( db_start->canReadLineStdout() )
{
db_output = db_start->readLineStdout();
kdDebug() << "dosbox: ->" << db_output.mid( db_output.find( ":" )+ 1) << endl;
}


ich werd irre, oder ich steh wieder mal aufm schlauch :(

EDIT: als kleine anerkennung steht IHR beide mit im Programm :cool:

anda_skoa
09-07-2004, 15:11
Du musst die StringList db_with_config nacher schon wieder leeren, sonst hängst du jedes mal nur weitere Parameter an den ersten Aufruf an.

Ciao,
_

ChMaster|LFreak
09-07-2004, 18:12
auf das hätt ich selber kommen können, also stand ich wirklich auf dem
schlauch :rolleyes: