Russian Qt Forum
Ноябрь 01, 2024, 20:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Контекстное меню QGraphicsItem  (Прочитано 14039 раз)
alexman
Гость
« Ответ #15 : Январь 25, 2011, 21:40 »

И как без слота определить какой QAction подал сигнал?
Код:
void CustomItem::contextMenuEvent(QGraph icsSceneContextMenuEvent *event)
{
QMenu menu;
QAction *removeAction = menu.addAction("Remove");
QAction *markAction = menu.addAction("Mark");
QAction *selectedAction = menu.exec(event->screenPos());
if ( selectedAction == removeAction ) { //...
} else if ( selectedAction == markAction ) { //...
}
}
Записан
iukash
Гость
« Ответ #16 : Январь 25, 2011, 21:51 »

И как без слота определить какой QAction подал сигнал?
Код:
void CustomItem::contextMenuEvent(QGraph icsSceneContextMenuEvent *event)
{
QMenu menu;
QAction *removeAction = menu.addAction("Remove");
QAction *markAction = menu.addAction("Mark");
QAction *selectedAction = menu.exec(event->screenPos());
if ( selectedAction == removeAction ) { //...
} else if ( selectedAction == markAction ) { //...
}
}
Спасибо и Вам тоже! Завтра буду пробывать!
Записан
iukash
Гость
« Ответ #17 : Январь 26, 2011, 10:31 »

Если нужны слоты, то наследуйся от QGraphicsObject

Наследуюсь от QGraphicsObject, делаю все также со слотом пишет
Код:
Object::connect: No such slot QGraphicsObject::slotmessage() in graphika_rect.cpp:30
Хотя слот этот видит (когда пишу SLOT при открытии скобки автодополнение кода пишет slotmessage())

А как посоветовал alexman не использовать слоты, так работает, спасибо!
« Последнее редактирование: Январь 26, 2011, 10:35 от iukash » Записан
BRE
Гость
« Ответ #18 : Январь 26, 2011, 10:33 »

Ты в свой класс Q_OBJECT добавил?
qmake вызывал после изменения класса?
Записан
iukash
Гость
« Ответ #19 : Январь 26, 2011, 10:45 »

Ты в свой класс Q_OBJECT добавил?
qmake вызывал после изменения класса?


Теперь сделал, это сообщение
Цитировать
Object::connect: No such slot QGraphicsObject::slotmessage() in graphika_rect.cpp:30
в консоль не выводится, но в слот он не попадает.
Хотя это уже не важно, главное что работает! Всем спасибо!
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #20 : Январь 26, 2011, 16:45 »

Давай сюда код *.h файла и код коннекта.

В первом посте у тебя slot_message, тут уже slotmessage.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
iukash
Гость
« Ответ #21 : Январь 26, 2011, 17:46 »

Код .h
Цитировать
#ifndef GRAPHIKA_RECT_H
#define GRAPHIKA_RECT_H
#include "mainwindow.h"

class Graphika_rect: public QGraphicsObject
{
    Q_OBJECT
public:
    Graphika_rect();

    virtual QRectF boundingRect() const
    {
        return QRectF(0,0,1000,740);
    }

    virtual void keyPressEvent ( QKeyEvent * event );
    virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0);

protected:
    virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
    //    virtual void mousePressEvent ( QGraphicsSceneMouseEvent * event );
    //    virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event );
    //    virtual void dragEnterEvent ( QGraphicsSceneDragDropEvent * event );
    //    virtual void dragLeaveEvent ( QGraphicsSceneDragDropEvent * event );
    //    virtual void dragMoveEvent ( QGraphicsSceneDragDropEvent * event );
    //    virtual void dropEvent ( QGraphicsSceneDragDropEvent * event );
    //    virtual void hoverEnterEvent ( QGraphicsSceneHoverEvent * event );
    //    virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event );
    //    virtual void mouseDoubleClickEvent ( QGraphicsSceneMouseEvent * event );
    //    virtual void mouseMoveEvent ( QGraphicsSceneMouseEvent * event );
};
#endif // GRAPHIKA_RECT_H
код коннекта
Цитировать
void Graphika_rect::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{
    QMenu menu;
    QAction *removeAction = menu.addAction(tr("Создать итем"));
    QAction *markAction = menu.addAction(tr("Для сцены 2"));
    QAction *selectedAction = menu.exec(event->screenPos());
    connect(&menu,SIGNAL(triggered(QAction*)),SLOT(slotmessage()));
}
void Graphika_rect::slotmessage()
{
    QMessageBox::warning(0,tr("Предупреждение"),tr("Нажата кнопка"));
}
Записан
alexman
Гость
« Ответ #22 : Январь 26, 2011, 17:52 »

Так slotmessage() в Graphika_rect не объявлен!
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #23 : Январь 26, 2011, 18:11 »

И коннект не в том месте:

Код
C++ (Qt)
void Graphika_rect::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{
   QMenu menu;
   QAction *removeAction = menu.addAction(tr("Создать итем"));
   QAction *markAction = menu.addAction(tr("Для сцены 2"));
   connect(&menu,SIGNAL(triggered(QAction*)),SLOT(slotmessage()));
   menu.exec(event->screenPos());
}
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
alexman
Гость
« Ответ #24 : Январь 26, 2011, 21:54 »

Дааа, одни приколы!
Записан
iukash
Гость
« Ответ #25 : Январь 26, 2011, 22:21 »

Цитировать
Так slotmessage() в Graphika_rect не объявлен!
Да был он объявлен, просто потом удалил, и при восстановлении забыл вставить!
А вот то что коннект не в том месте это очень даже может быть!
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #26 : Январь 27, 2011, 00:30 »

> Да был он объявлен, просто потом удалил, и при восстановлении забыл вставить!

И как он был объявлен?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
iukash
Гость
« Ответ #27 : Январь 27, 2011, 16:43 »

> Да был он объявлен, просто потом удалил, и при восстановлении забыл вставить!

И как он был объявлен?
Так
Цитировать
public slots:
   void slotmessage();
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.15 секунд. Запросов: 23.