qt painter

0

witam. nie dawno zaczalem zabawe z Qt i na poczatek zabralem sie za qpaintera. poczytalem to i owo o nim, zrobilem tak jak kazano lecz w konstruktorze mojej klasy wystepuje blad pod nazwa "undefined reference to `vtable for Rysunek". wiec zajrzalem na guglach, a na nim sa podobne przyklady co do paintera i ciupine zmodyfikowalem, ale co z tego jak nadal wystepuje to samo.

class Rysunek : QWidget
{
    Q_OBJECT

    private:
    QPainter painter;

    public:
    Rysunek(QWidget *parent = 0);
    void painEvent(QPaintEvent *);
};


Rysunek::Rysunek(QWidget *parent) : QWidget(parent) // <- tutaj ten wczesniej wspomniany error
{
}

Rysunek::paintEvent(QPaintEvent *) 
{
}
0

Ojjj Bracie,coś słabo to Qt poznawał...
1.Obiekt QPaintera tworzy się dopiero w funkcji paintEvent mniej więcej tak:

void paintEvent(QPaintEvent *e) 
{
    QPainter painter(this);
    painter.doSomething();
}

2.Kopsnąłeś się w deklaracji i definicji-w h masz painEvent (albo lubisz sadomaso i tak Ci się wymsknęło :P )
3.paintEvent ma dostępność protected,więc wsadź go do sekcji protected/private

0

To mam robić bez konstruktora? Sa jeszcze 2 problemy, wyjasnie je na dole.

<code=cpp
class Rysunek : QWidget
{
Q_OBJECT

protected:
void paintEvent(QPaintEvent *);

public:
Rysunek(QWidget *parent = 0);

};

Rysunek::Rysunek(QWidget *parent) : QWidget(parent)
{
}

void Rysunek::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setBrush(Qt::red);
painter.drawText(30,30,"Jadzia");
}

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.setGeometry(100,100,300,300);
w.show();

Rysunek oh;
oh.show();
return a.exec();

}


W manualu na stronce qt nie ma wzmianki o uruchomieniu tego co już narysowaliśmy, spotkałem gdzieś na googlach, żeby użyc metody show(), lecz kompilator mowi o tym, ze nie jest ona dostepna. Wiec jak mam odpalic to co juz narysowalem w paintEvent? 

Druga sprawa to komunikat o tym, ze  QWidget nie jest elementem/podstawa klasy 'Rysunek'. Przeciez to klasa Rysunek wywodzi sie z QWidget, a wiec co jest grane? Nie rozumiem... Komunikat z angielskiego zwie sie: 'QWidget' is not an accessible base of 'Rysunek'
0

Cóż Bracie,to jedziemy:
1.Odziedziczenie QWidget winno wyglądać tak class Rysunek : public QWidget.Komunikat o tym,że QWidget nie jest klasą bazową z d**y zupełnie...hmmm może zapomniałeś o #include <QWidget>?
2.Makro Q_OBJECT w Twoim przypadku jest zbędne
3.Operacje na MainWindow zupełnie zbędne.Wystaczy tylko to Rysunek oh i oh.show()
a reszta wygląda dobrze

0

ok śmiga, trzeba było dodać sekcje publiczna do qwidgeta

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