QT pomoc z klasą abstrakcyjną

QT pomoc z klasą abstrakcyjną
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam,
Zamieszam częściowy kod w QT , mam problem gdy staram się uruchomić program kompilator wyrzuca mi taki o to błąd:

Kopiuj
 C:\Test_oryginal\test\test.cpp:30: błąd: cannot allocate an object of abstract type 'WidgetWithBackground'
         bar = new WidgetWithBackground(widget);
                                              ^
Kopiuj
 class WidgetWithBackground : public QWidget
{
public:
     WidgetWithBackground(QWidget * parent = 0);
         virtual ~WidgetWithBackground ();


protected:

   virtual void  paintBackground(QPainter & painter) = 0;
Kopiuj
 class WidgetWithBackground;

    class TestWidget : public QMainWindow,  private Ui::TestForm
    {
       Q_OBJECT
    public:
        TestWidget(QMainWindow *parent = 0);

        void initialize();
        void connections();
    public slots:
       void ComboBoxChoiceChanged(int index );
        void SpinBoxValueChanged(double val);

    private slots:
    void on_tab_destroyed();

    void on_stackedWidget_destroyed();

    private:
        void closeEvent ( QCloseEvent * e );
    QTabWidget *tabWidget;

    WidgetWithBackground *bar;

    };
 

I w tym momencie wyrzuca mi błąd:

Kopiuj
 QWidget * widget = stackedWidget->widget(0);
        widget = stackedWidget->widget(0);
        bar = new WidgetWithBackground(widget);//dokladnie w tym miejscu
        bar->setValueFont(font());
        bar->resize(120,120);
        QLayout * layout = new QVBoxLayout();
        layout->addWidget(bar);
        widget->setLayout(layout);
n0name_l
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2412
0

I czego nie rozumiesz w tym komunikacie?

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
0

No już powiem :)
Nie można tworzyć obiektu z klas abstrakcyjnych, ponieważ... są abstrakcyjne. Klasy te służą jedynie do dziedziczenia. Ot i powód błędu.

xfin
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Genewa
  • Postów: 597
0

Pytanie typu "praca u podstaw:
czy jest możliwe utworzenie obiektu klasy czysto wirtualnej (czy tam abstrakcyjnej)? Jeśli nie, to do czego służą takie klasy?

  • Rejestracja: dni
  • Ostatnio: dni
0

Okey to przedstawcie jakiś przykład jak to rozwiązać dopiero zaczynam przygode z qt ;/

fasadin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4883
n0name_l
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2412
0
Kopiuj
   virtual void  paintBackground(QPainter & painter) = 0;

Spojrz na ta linijke w twojej klasie, otworz pierwszy lepszy tutorial do podstaw C++ i sie dowiedz co ona oznacza.

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
0

Choćby tak:

Kopiuj
 class WidgetWithBackground : public QWidget
{
public:
    WidgetWithBackground(QWidget * parent = 0);
    void  paintBackground(QPainter & painter);
    ~WidgetWithBackground ();
}

Skoro chcesz tworzyć finalny obiekt z ulepszonej klasy QWidget to usuń z niej abstrakcje (metody czysto wirtualne i w ogóle wirtualność). Proste.

  • Rejestracja: dni
  • Ostatnio: dni
0

Grzesiek stosując się do twojej rady program się kompiluję jednak funkcja paintBackground w ogolę nie tworzy tła

n0name_l
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2412
1

Przeczytaj to co @fasadin wkleil, a potem sie zabieraj za okienka...

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.