2012-04-10 1 views
2

Qt에서 클릭을 처리하는 데 문제가 있습니다. 나는 다음과 같은 클래스가 :이 프로그램을 실행할 때Qt 오브젝트 신호가 메소드 (핸들러)에 연결되지 않았습니다.

MyRectItem *i = new MyRectItem(-d, -d, d, d); 
     i->setPen(QPen(Qt::darkBlue)); 
     i->setPos(150,150); 
     // canvas is a QGraphicsScene 
     canvas.addItem(i); 
     i->setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable); 
     QObject::connect(&canvas, SIGNAL(selectionChanged(bool)), this, SLOT(test())); 

, 원이 canvas에 표시되지만 때 :

class MyRectItem : public QObject, public QGraphicsEllipseItem{ 
    Q_OBJECT 
public:  
    MyRectItem(double x,double y, double w, double h) 
    : QGraphicsEllipseItem(x,y,w,h)  
    {} 

public slots:  
    void test() { 
     QMessageBox::information(0, "This", "Is working"); 
     printf("asd"); 
    } 
signals:  
    void selectionChanged(bool newState); 

protected:  
    QVariant itemChange(GraphicsItemChange change, const QVariant &value) { 
     if (change == QGraphicsItem::ItemSelectedChange){ 
      bool newState = value.toBool(); 
      emit selectionChanged(newState); 
     } 
     return QGraphicsItem::itemChange(change, value); 
    } 
}; 

가 지금은 신호에 슬롯을 연결하려는를, 나는 다음을 수행

Object::connect: No such signal QGraphicsScene::selectionChanged(bool) 

어떤 제안 : 원 아무 일도 발생하지 않고 콘솔은 다음과 같은 표시를 클릭?

답변

2

콘솔 메시지가 당신의 대답입니다. 사용하는 Qt 버전을 지정하지 않으므로 최신 안정 버전으로 4.8을 사용하려고합니다.

QObject::connect(&canvas, SIGNAL(selectionChanged()), this, SLOT(test())); 

로 : here에서 볼 수 있듯이, 정말

그러나
selectionChanged(bool) 

와 같은 신호가 아니며,

selectionChanged() 
4

이미이 시도하셨습니까 신호가 내가 아는 한 QGraphicsScene의 selectionChanged 신호에는 어떤 매개 변수도 없다 : http://qt-project.org/doc/qt-4.8/qgraphicsscene.html#selectionChanged.

여기서 QGRaphicsScene의 신호를 MyRectItem에서 정의한 신호가 아닌 'test'슬롯에 연결하려고합니다.

QObject::connect(i, SIGNAL(selectionChanged(bool)), this, SLOT(test())); 

첫 번째 매개 변수는 신호의 소스 (보낸 사람)입니다 : 당신이 MyRectItem에서 신호를 연결하려는 경우, 당신은 같은 것을해야한다.

제럴드