2

Qt でクリックを処理する際に問題が発生しました。私は次のクラスを持っています:

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);
    }
};

スロットを信号に接続したいので、次のようにします。

   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ますが、円をクリックしても何も起こらず、コンソールに次のように表示されます。

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

助言がありますか?

4

2 に答える 2

4

すでにこれを試しましたか:

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

私の知る限り、QGraphicsScene からの信号 selectionChanged にはパラメーターがありません: http://qt-project.org/doc/qt-4.8/qgraphicsscene.html#selectionChanged

ここでは、MyRectItem で定義した信号ではなく、QGRaphicsScene からの信号をスロット 'test' に接続しようとしています。MyRectItem からのシグナルを接続する場合は、次のようにする必要があります。

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

最初のパラメーターは、信号のソース (送信者) です。

ジェラルド

于 2012-04-10T11:57:37.510 に答える
2

コンソール メッセージがあなたの答えです。使用している Qt のバージョンが指定されていないため、4.8 が最新の安定版であると仮定します。ここからわかるように、実際にはそのような信号はありません

selectionChanged(bool)

ただし、信号があります

selectionChanged()
于 2012-04-10T11:47:06.263 に答える