2012-04-10 12 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からの信号を接続する場合は、あなたのような何かを行う必要があります。

ジェラルド

関連する問題