QT pomoc z klasą abstrakcyjną

0

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

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


protected:

   virtual void  paintBackground(QPainter & painter) = 0;
 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:

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

I czego nie rozumiesz w tym komunikacie?

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.

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?

0

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

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

0

Choćby tak:

 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.

0

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

1

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1