子类化 QPixmap

Subclassing QPixmap

我想在 Qt 中的 QPixmap 上获取鼠标按下事件。 我尝试使用以下方法对其进行子类化:

class CustomPixmap : public QPixmap
{
    Q_OBJECT

public:
    CustomPixmap(QPaintDevice *parent = NULL);
    ~CustomPixmap() {};

protected:
    void mousePressEvent(QMouseEvent *event);

};

但是编译失败因为报错

./moc_output/moc_customPixmap.cpp:52:8: error: no member named
      'staticMetaObject' in 'QPixmap'; did you mean simply 'staticMetaObject'?

去掉Q_OBJECT编译正常,但是没有调用mousePressEvent。如何正确地子类化 QPixmap 以获得鼠标按下事件?

在 QPixmap 上接收鼠标事件没有意义,因为 QPixmap 不是 QWidget,因此 QPixmap 永远不会直接出现在您的 Qt GUI 中。

屏幕上的是某种绘制和显示QPixmap的QWidget。这可能是一个 QLabel 或 QWidget,其 paintEvent(QPaintEvent *) 方法已被覆盖以调用 painter.drawPixmap() 并将您的 QPixmap 作为参数。覆盖 mousePressEvent() 的明智位置是在该小部件的子类中,而不是通过子类化 QPixmap。

我终于使用了 QPushButton:

QPushButton *button = new QPushButton;
button->setIcon(QIcon(myQPixmap));
buttonWidget=MySceneClass->scene()->addWidget(button);
QObject::connect(button, SIGNAL(clicked()),this, SLOT(clickedSlot()));