QT 4.5: Verwendung von Timeline



  • Hi,

    ich möchte das Objekt "QTimeline" in einer Klasse verwenden, um eine zyklischen Akualisierung der Anzeige durchzuführen.
    Hat jemand Erfahrung damit, ob es zu Problem führen kann,
    wenn man mehr als 100 Timelines am laufen hat ?

    Gruss



  • Hi,

    ich werde einfach die ganze Sache so testen.

    Derzeit scheint es ja nicht das Problem zu sein,da der ganze Spass doch sehr
    schnell geht und meine Updateroutine eigentlich nicht sehr lang ist.

    Werde meine Ergebnisse später hier ablegen für andere .

    Gruss



  • Kannst dir ja überlegen, ob du die Timelines nicht teilen kannst. Dass also mehrere Objekte sich an die Signale einer einzigen Timeline hängen.
    Wenn dir die Duration der Timeline reicht, kannst du dir eine QMap<int, QTimeline*> anlegen.
    Wenn du mehrere Werte zur eindeutigen Bestimmung brauchst nimm nen QMap<IDData, QTimelne*>, wobei IDData ein Struct mit den benötigten Werten ist.

    Sollte jedes deiner Objekte ein ganz spezielles Setup für die Timeline brauchen macht das natürlich keinen Sinn.



  • Hi,

    derzeit ist das Timeline Objekt Teil meiner GrafikItem Class.
    Diese kümmert sich dann eigenständig um das Update.

    Vom Prinzip benötige ich nur eine globale Zeit, da alle Objekte
    einen Status zu einem bestimmten Zeitpunkt darstellen sollen.

    Nur sagt mir Deine Ansatz derzeit sehr wenig (mangels Wissen).
    Hier muss ich mich erst noch einlesen.
    Danke für den Tip.

    Gruss



  • Also, wenn alle deine GraphicsItems auf Dauer die selbe TimeLine verwenden, dann mach das TimeLine-Objekt doch als static-Member 🙂

    Allerdings würde ich die Animation und die Timeline in dem Fall nicht als Member deiner Item-Klasse nehmen, sondern in das übergeordnete, managende Objekt. Wahrscheinlich ein MainWindow. Denn die Animation hat ja erstmal nix mit deinem Item zu tun.

    Ansonsten dachte ich an so etwas:

    struct TimeLineData
    {
        int duration;
        // und alles was deine TimLines unterscheidet
    }
    
    typedef QMap<TimeLineData, QTimeLine*> TLMap;
    
    class TimeLineStorage
    {
        TimeLineStorage()
        {}
        // usw, halt Singleton
        TLMap m_timelines;
    public:
        static TimeLineStorage& instance()
        {
            static TimeLineStorage storage;
            return storage;
        }
    
        QTimeLine* get( const TimeLineData& data )
        {
            TLMap::iterator it = m_timelines.find(data);
            if(it != m_timelines.end())
                return i.value();
    
            QTimeLine* timeline = new QTimeLine;
            // neues Objekt mit Daten aus data füttern
            m_timelines[data] = timeline;
            return timeline;
        }
    };
    

    Dass also für das selbe setup einer TimeLine auch nur eine QTimeLine existiert.
    TimeLineStorage würde ich als Singleton implementieren, damit du in deinem ganzen Programm (und vor allem für alle neuen Items) Zugriff auf diese QTimeLines hast.
    Ich hoffe das war einigermaßen verständlich (hat ja erstmal nix mit Qt zu tun 🙂 )



  • Hi,

    erstmal nochmals vielen Danke für den Tip (Singleton). Ich muss erst noch andere Baustellen im Programm beseitigen, bevor ich mich diesem Thema nochmals zuwende.

    Von der Performance sehe ich derzeit keine Probleme, da meine Zeichenroutine
    nicht sehr aufwendig ist. Aber dies muss sich erst noch weiter zeigen.

    Gruss


Anmelden zum Antworten