私はQTにかなり慣れておらず、基本的なペイントの例を機能させるのに苦労しています。メインのゲームコントローラーでウィジェットをインスタンス化するゲームを作成しています。これを複数の異なるオブジェクトに渡して、各オブジェクトが独自のpaintEventを持ち、それに応じてオブジェクトをペイントできるようにします。(つまり、キャラクターは別々にペイントします、風景など)
これが私の「アニメーション化されたオブジェクト」ヘッダーです:
class Animated_object: public QWidget {
public:
Animated_object(char * _image_url, QWidget * window);
~Animated_object();
protected:
QImage * get_image();//this will return the image for this object
QRect * get_rectangle();//this will return the rectangle of coordinates for this point
protected:
virtual void paintEvent(QPaintEvent * event) = 0;
virtual void set_image(char * _image_url) = 0;
protected:
QWidget * window;
char * image_url;//this is the imageurl
QImage * image;
QRect * rectangle;
};
私のアニメーションオブジェクトコンストラクター:
Animated_object::Animated_object(char * _image_url, QWidget * _window) : QWidget(_window) {....}
これが私のキャラクターヘッダーです(キャラクターはanimated_objectから継承します)
class Character : public Animated_object {
public:
Character(QWidget * _window);
~Character();
void operator()();//this is the operator for the character class -- this is responsible for running the character
void set_image(char * _image_url) {};
void paintEvent(QPaintEvent * event);
};
コンストラクターにメインウィジェットポインターを渡すことで、キャラクターをインスタンス化します。したがって、複数の文字を呼び出すことができる別のクラスがあり、それらはすべて同じウィジェットにペイントされます(うまくいけば)。
私のキャラクターpaintEventは次のようになります:
void Character::paintEvent(QPaintEvent * event) {
QPainter painter(this);//pass it in window to ensure that it is painting on the correct widget!
cout << "PAINT EVENT " << endl;
QFont font("Courier", 15, QFont::DemiBold);
QFontMetrics fm(font);
int textWidth = fm.width("Game Over");
painter.setFont(font);
painter.translate(QPoint(50, 50));
painter.drawText(10, 10, "Game Over");
}
それは呼び出されていますが(私はそれをテストするためにstd :: coutを使用しました)、何もペイントしていません...
最後に、ここで私のメインウィジェットが呼び出されます。
Hill_hopper::Hill_hopper(): Game(500,500, "Hill Hopper") {
Character * character = new Character(window);
window->show();
application->exec();
}
そして、これがゲームコンストラクターです:
Game::Game(int _height, int _width, char * title): height(_height), width(_width) {
int counter = 0;
char ** args;
application = new QApplication(counter, args);
window = new QWidget();
desktop = QApplication::desktop();
this->set_parameters(title);
}
どんな助けでも大歓迎です