Dziedziczenie w Qt

Dziedziczenie w Qt
  • Rejestracja: dni
  • Ostatnio: dni
0

cześć,
uczę się programować w QT i trafiłem na pewien problem.
Utworzyłem kasę z formem. Na formie mam kilka zakładek więc chciałem, żeby każdą zakładką zarządzała osobna klasa.
Mam więc klasę główną:

Kopiuj
#include <QMainWindow>
#include <QDate>

namespace Ui {
class KlasaForm;
}

class KlasaForm : public QMainWindow
{
    Q_OBJECT

public:
    ...

protected:
    Ui::KlasaForm *ui;

i tworzę klasę pochodną:

Kopiuj
#include "klasaForm.h"

class klasaPochodna : KlasaForm
{
public:
    ...
};

W klasie pochodnej mogę wywoływać metody z klasy nadrzędnej ale nie wiem jak w klasie pochodnej zmieniać samego forma, np. w taki sposób:
ui->jakasLista->addItem("aaa")

dostaje błąd "invalid use of incomplete type 'class Ui::KlasaForm' "

several
  • Rejestracja: dni
  • Ostatnio: dni
0

dostaje błąd "invalid use of incomplete type 'class Ui::KlasaForm' "

Ten błąd oznacza, że brakuje Ci #include KlasaForma.h

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

Uprzedzając kolejne pytanie: brakuje Q_OBJECT w klasie pochodnej.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
1

Q_OBJECT nie jest niezbędne jeśli nie definiuje nowych sygnałów/slotów (i ogółem nie korzysta z MOC).

Swoją drogą: czemu prywatnie dziedziczysz po KlasaForm?

a co do samego pytania: @several prawdopodobnie się myli: aby korzystać z klasy wygenerowanej przez designera musisz zaincludować ui_klasaform.h (lub jakkolwiek inaczej się wygenerowany plik nazywa). Jest to jednak prawdopodobnie błąd designowy - pimpl/dptr jest po to, aby był widoczny wyłącznie dla jednej klasy. Zastanów się czy nie warto udostępnić odpowiednich rzeczy w publicznym interfejsie KlasaForm

  • Rejestracja: dni
  • Ostatnio: dni
0

#include KlasaForma.h mam w pliku .h oraz .cpp

Q_OBJECT powinienem dodać w ten sposób: #include "QObject"?
jeśli tak co nic nie pomogło.

several
  • Rejestracja: dni
  • Ostatnio: dni
1
kq napisał(a):

@several prawdopodobnie się myli: aby korzystać z klasy wygenerowanej przez designera musisz zaincludować ui_klasaform.h

Nope, skrót myślowy w poście pisanym na szybko. Miałem na myśli dokładnie to co napisałeś, sądziłem że to jasne no i nie pamiętam konwencji nazewniczej generowanych przez designera plików. Moja wina.

Criss
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

Bo zadeklarowałeś klase Ui::KlasaForm, a definiujesz KlasaForm. To są dwie różne klasy, a skoro Ui::KlasaForm została **tylko **zadeklarowana, to nie dziwne, że kompialtor mówi, że jest niekompletna.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.