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