Jak zamienić zwykłe klasy C++ w klasy 'kompatybilne' z Qt



  • Jak zrobić, żeby obiekty tych klas można było wyświetlić w QTreeWidgetItem? Ogólnie ma to być sklep, a te klasy służą do stworzenia listy kategorii oraz produktów które się w niej znajdują. Nie wiem czy mój sposób rozwiązania tego problemu jest odpowiedni. Nie wiem jak pisać te klasy, żeby później łatwo można było je wyświetlać i używać SIGNAL i SLOT .
    Zadałem jeszcze pytanie na Qt Centre, ale niewiele mi to pomogło, próby robienia na podstawie "tego tutoriala":http://www.youtube.com/watch?v=TpkiVlOS3o4&list=SP2D1942A4688E9D63&index=21 też są marne, bo w zasadzie niewiele on pokazuje. Ktoś mógłby pomóc?

    "link do pytania":http://www.qtcentre.org/threads/54251-how-to-implement-list-of-lists-and-display-it
    @template <typename T>
    class obiektKategorii
    {

     QString nazwa;
     QList<T> lista;
    

    public:

     void ustawNazwe(QString n);
     QString dajNazwe();
     void dodaj(T element);
    
     obiektKategorii();
    

    };@

    @class obiektProduktu
    {
    protected:
    QString nazwa;
    double cena;
    public:

    virtual QString dajNazwe();
    virtual double dajCene();
    virtual void ustawCene(double c);
    virtual void ustawNazwe(QString n);
    obiektProduktu();
    

    };@



  • Do QTreeWidget możesz dodawać obiekty klasy QTreeWidgetItem. Jeśli chcesz użyć obiektów samodzielnie stworzonej klasy, to musi ona dziedziczyć po "QTreeWidgetitem":http://qt-project.org/doc/qt-4.8/qtreewidgetitem.html.

    Ogólnie rzecz biorąc (abstrahując od powyższego), aby używać "sygnałów i slotów":http://qt-project.org/doc/qt-4.8/signalsandslots.html, deklaracja klasy musi zawierać makro QOBJECT.

    Jeśli chcesz przedstawić dane w strukturze drzewiastej, to przeczytaj o "QTreeView":http://qt-project.org/doc/qt-4.8/qtreeview.html; ta klasa pozwoli Ci na zdefiniowane własnego modelu danych, co może być szczególnie przydatne w Twojej sytuacji (zapewne baza danych).

    Ogólnie: QTreeView i dziedzicząca po nim QTreeWidget to klasy pozwalające na przedstawienie danych przechowywanych w modelu i to stworzenie modelu Cię interesuje.



  • ok, zrobiłem dwie klasy dziedziczące po QTreeWidgetItem, ale nadal nie da się tego umieścić w liście.
    Oraz nie mogę stworzyć obiektów, a jedynie wskaźniki do nich.
    np.
    @produkt tyskie;@
    wywala błąd. poprawna wersja to:
    @produkt *tyskie;@

    Jak mam zrobić, żeby stworzone przeze mnie obiekty mogły być wyświetlane w tym drzewie? Dodam, że docelowo będzie QLista w QLiście czyli lista kategorii, w każdym obiekcie tej listy będzie lista subkategori i w każdym obiekcie z listy subkategorii będzie lista produktów.
    @
    kategoria1
    |->subkategoria1-> subkategoriaN->...
    -produkt1 -produkt1
    -produktN -produktN
    kategoria2
    |->subkategoria1-> subkategoriaN->...
    -produkt1 -produkt1
    -produktN -produktN@

    i chciałbym zrobić tak, że po naciśnięciu na 'subkategoria' w drzewie, w drugim okienku obok wyświetli się cała lista produktów, która będzie zawiarać się w obiekcie subkategoriaN .

    moje klasy:
    @#ifndef LISTAPRODUKTOW_H
    #define LISTAPRODUKTOW_H

    #include <QTreeWidgetItem>
    #include <QList>
    #include "produkt.h"

    class listaProduktow : public QTreeWidgetItem
    {
    Q_OBJECT

    public:
    QList<produkt> lista;
    void dodaj(produkt prod){ lista.append(prod);}
    explicit listaProduktow(QObject *parent = 0);

    signals:

    public slots:

    };

    #endif // LISTAPRODUKTOW_H@

    @#ifndef PRODUKT_H
    #define PRODUKT_H

    #include <QTreeWidgetItem>
    #include <QString>

    class produkt : public QTreeWidgetItem
    {
    Q_OBJECT
    public:
    QString nazwa;
    int cena;

    explicit produkt(QObject *parent = 0);
    

    signals:

    public slots:

    };

    #endif // PRODUKT_H@



  • Powinieneś zaprojektować własny model danych, dziedziczący po QAbstractItemModel, a następnie użyć go w swojej implementacji QTreeView / QTreeWidget. Poświęć chwilę na przeczytanie o klasie "QAbstractItemModel":http://qt-project.org/doc/qt-4.8/qabstractitemmodel.html oraz o "ogólnych zasadach tworzenia architektury model/widok w Qt":qt-project.org/doc/qt-4.8/model-view-programming.html (szczególnie "ten podrozdział":http://qt-project.org/doc/qt-4.8/model-view-programming.html#model-subclassing-reference).

    Pojedyncze obiekty klasy QTreeWidgetItem lub jej subklasy są przydatne jeśli chcesz wykonywać samodzielnie operacje na drzewie (a raczej danych w jego modelu).


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.