マウスイベントをオーバーライド/作成するためにGraphicsPixmapItem
というクラスをQGraphicsPixmapItem
から継承しました。問題は、いくつかの計算が実行された後に信号を出したいが、このクラスはQObject
ではないので、いくつかのハッキングが実行されない限り不可能であるように見えるということです。Qt:QGraphicsPixmapItemクラスの信号とスロット
これを行うには、私はQObject
からaformentionedされた新しいクラスを継承しようとしましたが、コンパイラエラーが発生しています。
マイattemp:
ヘッダファイル(graphicspixmapitem.h
):
#ifndef GRAPHICSPIXMAPITEM_H
#define GRAPHICSPIXMAPITEM_H
#include <QObject>
#include <QGraphicsPixmapItem>
#include <QGraphicsSceneMouseEvent>
class GraphicsPixmapItem : public QObject, public QGraphicsPixmapItem
{
Q_OBJECT
public:
explicit GraphicsPixmapItem(QGraphicsItem *parent = 0);
virtual void mousePressEvent(QGraphicsSceneMouseEvent * mouseEvent);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent * mouseEvent);
signals:
void translationVector(QPointF info);
};
#endif // GRAPHICSPIXMAPITEM_H
ソースファイル(graphicspixmapitem.cpp
):
#include "graphicspixmapitem.h"
GraphicsPixmapItem::GraphicsPixmapItem(QGraphicsItem *parent) :
QGraphicsPixmapItem(parent)
{
}
void GraphicsPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent * mouseEvent)
{
//Code
}
void GraphicsPixmapItem::mouseReleaseEvent(QGraphicsSceneMouseEvent * mouseEvent)
{
QPointF info;
//Code
emit(translationVector(info));
}
そして、私はトンを取得彼は、次のリンカエラー:GraphicsPixmapItemためのvtable `へ
未定義の参照 ' ` GraphicsPixmapItem :: translationVector(QPointF)へ
未定義の参照'
応じ進め方についての任意の手掛かり?
サイドノート:
私はQGraphicsObject
は良い選択肢を得ることを認識していますが、hereを議論したように、性能が厳しく彼らと一緒に動作しているときに放出される信号の量、それらのほとんどの影響を受けて見えます私の場合は使用されません。これは、QGraphicsObject
の代わりにQGraphicsItem
という基数で独自のクラスを作成することを好む理由です。
事前に感謝します。
前に2つの最初の点を確認しましたが、3番目の点は満たされていないようです(mocはgraphicspixmapitem.hで実行されていません)。私はこれをどのように修正すべきですか? – ksb496
mocコマンドは、qmakeによってMakefileに追加されます。 qmakeはHEADERS変数のすべてのヘッダーファイルをスキャンし、そこにQ_OBJECTマクロを探します。見つかるとすぐにmocを呼び出すMakefileルールを作成する必要があります。 –
それは、上で解説したコードに何らかのエラーがあって、qmakeがこのクラス(ヘッダおよび/またはソース)を認識しないようにするためです。 Q_OBJECTマクロ、QObjectクラスとシグナルの継承を削除すると、正しくコンパイルされますが、派生クラスで最終的に使用したいシグナル/スロットを使用できなくなります。 – ksb496