Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] QGraphicsWidget и connect, как их связать? 
:(
    Опции темы
JanryMayers
Дата 20.1.2011, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.6.2009
Где: Украина, г. Киев

Репутация: нет
Всего: нет



Всем привет! 

Проблема такого характера. Хочу создать свою кнопку на основе 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 вызываеца. 
PM MAIL   Вверх
panter
Дата 20.1.2011, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 10.1.2011
Где: Санкт-Петербург

Репутация: нет
Всего: нет



А в консоль что-нибудь выдает?
PM MAIL ICQ Skype Jabber   Вверх
JanryMayers
Дата 20.1.2011, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.6.2009
Где: Украина, г. Киев

Репутация: нет
Всего: нет



нет вот только то что я прописал

 => construct SpritImage... 
 => construct SpritImage... 
 => construct cGame... 
 => main_menu_init... 
 => View... 
 =>SpritImage paint...
 =>SpritImage paint...
PM MAIL   Вверх
borisbn
Дата 20.1.2011, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



mousePressEvent должен иметь такую сигнатуру
Цитата

void QGraphicsItem::mousePressEvent ( QGraphicsSceneMouseEvent * event ) 



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
JanryMayers
Дата 20.1.2011, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.6.2009
Где: Украина, г. Киев

Репутация: нет
Всего: нет



Спасибо, черт возьми, вроде ж и его пробывал)). Есть сигнал, кажется только от exit, причем он срабатывает не над кнопкой, а в левом верхнем углу. Как такое по лечить?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0875 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.