C++ nahravanie dynamickych premennych

Sekcia: Programovanie 06.11.2008 | 11:57
Avatar Dare_devil Debian, OpenSuse  Používateľ
Dobry den. Potrebujem zo suboru settings.inc ( .include ) vkladat do hlavneho programu napr.
QString bg = "bg2.png";
Tak som dal na zaciatok programu
#include <settings.inc>
a premennu bg pouzivam. Nastal vsak problem, program ma reagovat na zmenu v subore inc a po zmene hodnoty bg napr. na bg1.png nastavit pozadie nanovo. To by slo az na to, ze po zmene suboru settings.inc musim znovu prekompilovat program aby dokazal reagovat na zmenu.. Potrebujem to urobit tak ( Qt prostredie sa refreshuje kazdu sekundu pomocou QTimer-u takze s tymto problem nieje ) aby sa po zmene hodnoty bg previedla zmena aj v programe. Ako je to mozne urobit?
Dakujem
There is no flag large enough to cover the shame of killing innocent people
    • Re: C++ nahravanie dynamickych premennych 06.11.2008 | 12:03
      Avatar Samuel BWPOW Kupka CentOS, Mandriva  Používateľ
      #include je direktiva pre kompilator. Je nejaky problem v timeri proste otvorit ten subor a tu hodnotu nanovo nacitat? Pripadne najprv pozriet stat, ci sa ten subor zmenil a parsovat len ak sa zmenil od posledneho parsovania.
      Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
      • Re: C++ nahravanie dynamickych premennych 06.11.2008 | 12:07
        Avatar Dare_devil Debian, OpenSuse  Používateľ
        No ale ako ho inak vlozit, ked nie cez include? Toto ja neviem.. Alebo ako ho otvorit a nacitat z neho premenne aby boli pouzitelne?
        There is no flag large enough to cover the shame of killing innocent people
      • Re: C++ nahravanie dynamickych premennych 06.11.2008 | 12:29
        Avatar Dare_devil Debian, OpenSuse  Používateľ
        Mno skusal som:
        	std::ofstream variables;
        	variables.open("settings.inc");
        
        Ale to mi tie hodnoty nenacita, iba otvori subor
        There is no flag large enough to cover the shame of killing innocent people
        • Re: C++ nahravanie dynamickych premennych 06.11.2008 | 12:44
          Avatar Samuel BWPOW Kupka CentOS, Mandriva  Používateľ
          Hmm, to fakt nevies ani tie uplne zaklady? Keby si to v tom subore zbytocne neformatoval (komu sa chce parsovat) a len proste napisal do neho cisto nazov toho obrazku, tak mozes urobit jednoduchu vec:
          FILE *s=fopen("settings.inc","r");
          if(s!=NULL){
            char buf[256];
            if(fscanf(s,"%s",buf)==1){
              bg = buf;
            }
            fclose(s);
          }
          
          Vsetky tieto funkcie maju predpisy definovane v cstdio. Este si to trochu uprav, aby ti nepretiekol buf a bude vsetko dobre.
          Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
          • Re: C++ nahravanie dynamickych premennych 06.11.2008 | 12:56
            Avatar Dare_devil Debian, OpenSuse  Používateľ
            Ja tam potrebujem mat viac ako 50 nastaveni a 50 hodnot, ktore sa budu menit za chodu programu, o to mi ide..
            There is no flag large enough to cover the shame of killing innocent people
            • Re: C++ nahravanie dynamickych premennych 06.11.2008 | 13:12
              Avatar Samuel BWPOW Kupka CentOS, Mandriva  Používateľ
              Stale nevidim problem si ich nacitat do nejakej rozumnej struktury.
              Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
              • Re: C++ nahravanie dynamickych premennych 06.11.2008 | 13:24
                Avatar Dare_devil Debian, OpenSuse  Používateľ
                Ako napr.?
                There is no flag large enough to cover the shame of killing innocent people
                • Re: C++ nahravanie dynamickych premennych 06.11.2008 | 13:31
                  Avatar Samuel BWPOW Kupka CentOS, Mandriva  Používateľ
                  No, ak su vsetky typu QString, tak nejako takto napriklad:
                  // niekde hore v pazi ako globalna premenna
                  std::map <QString,QString> premenna;
                  
                  // v timeri
                  FILE *s=fopen("settings.inc","r");
                  if(s!=NULL){
                    char buf1[256],buf2[256];
                    while(!feof(s)){
                      if(fscanf(s,"%s %s",buf1,buf2)!=2) break;
                      premenna[buf1]=buf2;
                    }
                    fclose(s);
                  }
                  
                  a potom k nim pristpujes ako premenna["bg"]. V subore je to ulozene ako:
                  bg pozadie.png
                  fg popredie.png
                  hlaska Blablabla
                  Samozrejme, moznosti je neuveritelne vela. Vacsina patri k uplnym zakladom.
                  Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
                  • Re: C++ nahravanie dynamickych premennych 06.11.2008 | 14:13
                    Avatar Dare_devil Debian, OpenSuse  Používateľ
                    Ok uz to ide, velmi pekne dakujem. Este ale potrebujem zistit, preco sa mi neobnovuje kazdu sekundu to okno.
                    Mam main.cpp kde mam
                    	QApplication app(argc, argv);
                    	MainWindow window;
                    	window.show();
                    	return app.exec();
                    
                    a v main.h mam:
                    
                    MainWindow::MainWindow(QWidget *parent)
                    	: QWidget(parent)
                    {
                    ........
                        	QTimer *timer = new QTimer(this);
                         	connect(timer, SIGNAL(timeout()), this, SLOT(update()));
                         	timer->start(1000);
                    ........
                    }
                    

                    Program funguje ale vyzera, ako keby sa nerefreshoval. Hladal som uz aj na oficialnej dokumentacii trolltechu, to mam s tamad.
                    There is no flag large enough to cover the shame of killing innocent people
                    • Re: C++ nahravanie dynamickych premennych 06.11.2008 | 14:39
                      Avatar Samuel BWPOW Kupka CentOS, Mandriva  Používateľ
                      Tento kus kodu je v poriadku. Metoda update() z triedy MainWindow by sa mala volat kazdu sekundu.
                      Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
                      • Re: C++ nahravanie dynamickych premennych 06.11.2008 | 16:29
                        Avatar Dare_devil Debian, OpenSuse  Používateľ
                        Mam to urobene tak, ze mam tvoj kod, potom vsetky atributy okna a nakoniec timer, ak je potrebne ukazem kod. Je chyba v poradi?
                        There is no flag large enough to cover the shame of killing innocent people
                        • Re: C++ nahravanie dynamickych premennych 06.11.2008 | 19:51
                          Avatar Samuel BWPOW Kupka CentOS, Mandriva  Používateľ
                          Jasne, posli mi kod, kuknem na to. Najlepsie spakovany emailom na skupka@sageteam.eu
                          Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity