Всем привет!
Проблема такого характера. Хочу создать свою кнопку на основе QGraphicsWidet. Создаю класс наследуясь от QGraphicsWidget. Не могу навесить на него connect.
Мой класс, *.h
| Код | class SpritItem : public QGraphicsWidget{ Q_OBJECT public: explicit SpritItem(QGraphicsWidget*); QPixmap* pixmap; void setDimensions(int, int, int, int); ~SpritItem(); protected: void paint(QPainter *, const QStyleOptionGraphicsItem*,QWidget*);
virtual void mousePressEvent(QMouseEvent *){ qDebug()<<"=> SpritItem mousePressEvent..."; emit clicked(); } QRectF boundingRect() const{ qDebug()<<"=> QRectF..."<<" x = "<<x<<",y = "<<y<<",dx = "<<dx<<",dy = "<<dy; return QRectF(x,y,dx,dy); } signals: void clicked(); void pressed(); public slots: private:
int x, y; int dx, dy; };
|
место где я прописываю connect на первую кнопку new_game
| Код | cGame::cGame():exit(new SpritItem(0)), main_menu(new QGraphicsScene()), ....., ....., new_game(new SpritItem(0)){ .... .... } void cGame::main_menu_init(){
main_menu->setBackgroundBrush(QPixmap(":/Data/images/main_bg.jpg"));
new_game->pixmap = new QPixmap(":/Data/images/new_game.jpg"); new_game->setDimensions(bPos_new_game_x, bPos_new_game_y, new_game_dx, new_game_dy);
exit->pixmap = new QPixmap(":/Data/images/exit.jpg"); exit->setDimensions(bPos_exit_x, bPos_exit_y, exit_dx, exit_dy);
SpritItem::connect(new_game, SIGNAL(clicked()),this, SLOT(newGame())); // newGame() слот прописан в следующем куске кода
main_menu->addItem(new_game); main_menu->addItem(exit); main_menu->setItemIndexMethod(QGraphicsScene::NoIndex); }
|
класс cGame
| Код | class cGame : public QGraphicsView{ Q_OBJECT public: SpritItem* exit; QGraphicsScene* main_menu; // главное меню ... SpritItem* new_game; //кнопка новой игры public: ... ... protected slots: void newGame();
|
connect для второй кнопки exit
| Код | int main(int argc, char *argv[]) { QApplication app(argc, argv); //Создаем объект приложение //проверка на наличие библиотеки OpenGL и пиксельный буфер расширения if (!QGLFormat::hasOpenGL() || !QGLPixelBuffer::hasOpenGLPbuffers()) { QMessageBox::information(0, "OpenGL pbuffers", "This system does not support OpenGL/pbuffers."); return -1; } cGame game; //объект Игра SpritItem::connect(game.exit, SIGNAL(clicked()), &app,SLOT(quit())); //Выход по кнопке "Exit" game.start(); // начало игры game.show(); // показать игру return app.exec(); }
|
при клике на эти спрайты ничего не происходит, только функция QRectF boundingRect() const вызываеца. |