Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Polish
  4. Jak zamienić zwykłe klasy C++ w klasy 'kompatybilne' z Qt

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

Scheduled Pinned Locked Moved Polish
4 Posts 2 Posters 3.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • F Offline
    F Offline
    FantaZy
    wrote on last edited by
    #1

    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();
    

    };@

    1 Reply Last reply
    0
    • A Offline
      A Offline
      Alek Śmierciak
      wrote on last edited by
      #2

      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.

      1 Reply Last reply
      0
      • F Offline
        F Offline
        FantaZy
        wrote on last edited by
        #3

        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@

        1 Reply Last reply
        0
        • A Offline
          A Offline
          Alek Śmierciak
          wrote on last edited by
          #4

          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).

          1 Reply Last reply
          0

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved