abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 16:44 | Komunita

    Dnes v 17:30 bude oficiálně vydána open source počítačová hra DOGWALK vytvořena v 3D softwaru Blender a herním enginu Godot. Release party proběhne na YouTube od 17:00.

    Ladislav Hagara | Komentářů: 3
    včera 14:55 | Humor

    McDonald's se spojil se společností Paradox a pracovníky nabírá také pomocí AI řešení s virtuální asistentkou Olivii běžící na webu McHire. Ian Carroll a Sam Curry se na toto AI řešení blíže podívali a opravdu je překvapilo, že se mohli přihlásit pomocí jména 123456 a hesla 123456 a získat přístup k údajům o 64 milionech uchazečů o práci.

    Ladislav Hagara | Komentářů: 9
    včera 00:11 | Nová verze

    Byla vydána (𝕏) červnová aktualizace aneb nová verze 1.102 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.102 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    10.7. 21:00 | Bezpečnostní upozornění

    Byla vydána nová verze 2.4.64 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 8 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 4
    10.7. 15:22 | Nová verze

    Společnost xAI na síti 𝕏 představila Grok 4, tj. novou verzi svého AI LLM modelu Grok.

    Ladislav Hagara | Komentářů: 11
    10.7. 12:55 | Bezpečnostní upozornění

    Ministerstvo vnitra odhalilo závažný kyberincident v IT systému resortu. Systém, do kterého se dostal útočník bez oprávnění, byl odpojen a nedošlo k odcizení dat [𝕏].

    Ladislav Hagara | Komentářů: 16
    10.7. 11:55 | Humor

    Před rokem byla streamovací služba HBO Max přejmenována na Max. Dle managementu slovo HBO v názvu nebylo důležité. Včera byl Max přejmenován zpět na HBO Max. Kolik milionů dolarů to stálo? 😂

    Ladislav Hagara | Komentářů: 11
    10.7. 02:11 | Nová verze

    Byla vydána nová major verze 8.0.0 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata (Wikipedie). Přehled novinek v oficiálním oznámení a v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 0
    10.7. 01:11 | Nová verze

    Mastodon (Wikipedie) - sociální síť, která není na prodej - byl vydán ve verzi 4.4. Přehled novinek s náhledy a videi v oznámení na blogu.

    Ladislav Hagara | Komentářů: 1
    10.7. 00:11 | IT novinky

    Instituce státní správy nebudou smět využívat produkty, aplikace, řešení, webové stránky a webové služby poskytované čínskou společností DeepSeek. Na doporučení Národního úřadu pro kybernetickou a informační bezpečnost rozhodla o jejich zákazu vláda Petra Fialy na jednání ve středu 9. července 2025.

    Ladislav Hagara | Komentářů: 8
    Jaký je váš oblíbený skriptovací jazyk?
     (59%)
     (27%)
     (7%)
     (2%)
     (1%)
     (1%)
     (3%)
    Celkem 385 hlasů
     Komentářů: 16, poslední 8.6. 21:05
    Rozcestník

    Dotaz: Serializace v Qt

    8.9.2010 17:04 Roman Došek | skóre: 17 | blog: flare
    Serializace v Qt
    Přečteno: 397×
    Má někdo nějaké zkušenosti se serializací tříd, které obsahují Qt objekty? Pokoušel jsem se celou třídu serializovat pomocí QDataStream, ale již se mi ji nepovedlo obnovit zpět, nejsem si jistý jak jednotlivé prvky obnovit. Potřebuji to, abych mohl objekt přenést přes síť a sestavit ho zpět.

    Definice třídy:
    class Hrac
    {
      private:
        QString * jmeno;
        QColor * barva;
        int * znak;
        int * body;
      public:
        Hrac();
        Hrac(const Hrac &other);
        ~Hrac();
        void nastavVlastnosti(QString jmeno, QColor barva, int znak, int body);
        int * zjistiZnak();
        int * zjistiBody();
        QColor * zjistiBarvu();
        QString * zjistiJmeno();
        TypHrace * zjistiTyp();
        bool checkForVictory();
        friend QDataStream &operator<<(QDataStream &out, Hrac &hrac);
        void serialize(QDataStream& ost);
        static Hrac unserialize(QDataStream& istr);
    };
    

    Řešení dotazu:


    Odpovědi

    9.9.2010 10:41 Sten
    Rozbalit Rozbalit vše Re: Serializace v Qt
    Chtělo by to i definice metod serialize a unserialize, definice třídy se zdá v pořádku

    QDataStream& operator <<(QDataStream &out, Hrac &hrac) nemusí být friend, protože použije (měl by použít ) veřejnou metodu serialize

    unserialize by mělo vracet Hrac*, jinak se tam bude volat (zbytečně) copy konstruktor. Lepší by ale bylo vytvořit deserializační konstruktor explicit Hrac(QDataStream &str)

    Btw. proč jsou tam ty dva inty (znak a body) dynamicky alokované?
    9.9.2010 18:07 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Serializace v Qt
    To je právě v tom, já nevím jak ty metody serialize a unserialize napsat, nejjednodušší by asi bylo ukládat pouze některé části těch Qt objektů - textový řetězec z QStringu a kód barvy z QColor. Věděl bych, jak to udělat pro QTextStream, ale jak to udelat v QDataStream mi není přiliš jasné.
    QDataStream &operator<<(QDataStream &out, Hrac &hrac)
    {
        return(out << hrac.jmeno->length()<< " " << hrac.jmeno->toAscii() << " " << hrac.barva << " " << hrac.znak << " " << hrac.body);
    }
    
    void Hrac::serialize(QDataStream &ost)
    {
        ost << this;
    }
    
    Hrac Hrac::unserialize(QDataStream &istr)
    {
        Hrac tmp;
        int delkajmena;
        QString jmeno;
        QColor barva;
        int znak;
        int body;
        istr >> delkajmena;
        //istr.readBytes() //?
        tmp.nastavVlastnosti(jmeno,barva,znak,body);
        return tmp;
    }
    
    Tu deserializaci udělám pomocí toho kontruktoru, takové řešení mě nenapadlo, díky. Dynamickou alokaci tam používám pro všechny objekty uvnitř tříd, neměl by v tom být žádný rozdíl ne? Kdyby vás zajímal ještě nějaký kus kódu, tak to celé mám na SVN pod http://code.google.com/p/pisqorky/source/browse/trunk#trunk/src .
    David Watzke avatar 9.9.2010 23:14 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Serializace v Qt
    Dynamickou alokaci tam používám pro všechny objekty uvnitř tříd, neměl by v tom být žádný rozdíl ne?
    I kdyby to byla pravda, tak proč se v takovym případě namáhat?
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    Řešení 2× (Vojta Drbohlav, Roman Došek (tazatel))
    10.9.2010 11:11 Sten
    Rozbalit Rozbalit vše Re: Serializace v Qt
    Stačí jednoduše:
    void Hrac::serialize(QDataStream &str)
    {
        str << *this->jmeno << *this->barva << *this->znak << *this->body;
    }
    
    
    void Hrac::unserialize(QDataStream &str)
    {
        str >> *this->jmeno >> *this->barva >> *this->znak >> *this->body;
    }
    
    resp. s konstruktorem:
    Hrac::Hrac(QDataStream &str)
        : jmeno(new QString())
        , barva (new QColor())
        , znak (new int(0))
        , body (new int(0))
    {
        this->unserialize(str);
    }
    
    a pokud budou potřeba, tak přidat operátory
    QDataStream& operator <<(QDataStream &str, Hrac &hrac)
    {
        hrac.serialize(str);
        return str;
    }
    
    QDataStream& operator >>(QDataStream &str, Hrac &hrac)
    {
        hrac.unserialize(str);
        return str;
    }
    
    11.9.2010 17:21 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Serializace v Qt
    Díky moc :)
    9.9.2010 11:40 __dark__
    Rozbalit Rozbalit vše Re: Serializace v Qt
    Proč tam máš všude ty ukazatele?

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.