2013-07-13 39 views
0

連接專用插槽到的QAction在接下來的代碼中,我試圖添加動作到的ContextMenuEvent一個的QGraphicsItem中的QGraphicsItem

但問題是槽「調整()」是從來沒有所謂

void Rect::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) 
{ 
    QMenu * menu = new QMenu(); 
     QAction *resizeAction = menu->addAction("Resize?"); 
     connect(resizeAction, SIGNAL(triggered()), this, SLOT(resize())); 
     menu->exec(event->screenPos()); 
     delete menu; 

} 

編輯:: 類「矩形」的頭文件

class Rect: public QObject,public QGraphicsItem 
    { 

    public: 
     enum { Type = UserType + 4 }; 
     Rect(int x,int y,QString s,QColor myRectangleColor, 
      QGraphicsItem *parent = 0, QGraphicsScene *scene = 0); 
     Rect(); 
     int type() const 
     { return Type; } 
     QPainterPath shape() const; 
     QRectF my_rect; 

     virtual QRectF boundingRect() const; 
     virtual void paint (QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); 

    protected: 

     virtual void mouseMoveEvent (QGraphicsSceneMouseEvent * event) 
     virtual void mousePressEvent (QGraphicsSceneMouseEvent * event); 
     virtual void mouseReleaseEvent (QGraphicsSceneMouseEvent * event); 

     virtual void mouseMoveEvent(QGraphicsSceneDragDropEvent *event); 
     virtual void mousePressEvent(QGraphicsSceneDragDropEvent *event); 
     virtual bool sceneEventFilter (QGraphicsItem * watched, QEvent * event) ; 
     virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event); 


    private: 
     private slots: 
     void resize(); 
     void MoveUpFun(); 
    }; 
+0

'QGraphicsItem'不是'QObject'。但是你已經成功編譯了這段代碼,這是否意味着'Rect'繼承了'QGraphicsItem'和'QObject'?請顯示頭文件的內容。檢查'connect'的返回值。 –

+0

連接返回一個布爾值。檢查它是否知道它是否連接。如果它的私人它肯定不是... – Trompa

+0

@Riateche是它繼承了這兩個類和「連接」返回false – Radwa

回答

2

我是對我的評論:你錯過了你們班Q_OBJECT宏。

+0

一個小的宏,你必須把你的QObject派生類放在它們的信號和插槽中(...和其他東西,但這不是相關的)。防止進一步的問題:您需要將頭添加到.pro文件中的HEADERS部分,並重新運行* qmake。有關更多信息,請參閱[QObject文檔](http://qt-project.org/doc/qt-5.1/qtcore/qobject.html#Q_OBJECT)。 – peppe

+0

非常感謝 – Radwa