我正在嘗試手勢......並失敗。下面
我的代碼試圖讓捏—變焦,但沒有改變無法讓Qt手勢(QPinchGesture)正常工作
#include <QApplication>
#include <QtWidgets>
#include <QGraphicsView>
#include <QPinchGesture>
#include <QGestureEvent>
#include <QGraphicsRectItem>
#include <QMessageBox>
class MyView: public QGraphicsView
{
public:
MyView(QWidget *parent = 0)
{
Q_UNUSED(parent);
setTransformationAnchor(AnchorUnderMouse);
resetTransform();
setDragMode(ScrollHandDrag);
grabGesture(Qt::PinchGesture);
}
protected:
virtual bool event(QEvent *event)
{
if (event->type() == QEvent::Gesture)
return gestureEvent(static_cast<QGestureEvent*>(event));
return QGraphicsView::event(event);
}
private:
bool gestureEvent(QGestureEvent *event)
{
if (QGesture *pinch = event->gesture(Qt::PinchGesture))
pinchTriggered(static_cast<QPinchGesture *>(pinch));
return true;
}
void pinchTriggered(QPinchGesture* event)
{
QMessageBox::information(0, tr("pinch"), tr("triggered."));
// ... rest of the code may or may not work but I can't seem to get here
// so I removed it for now
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene scene(-20, -20, 150, 150);
MyView view;
view.setScene(&scene);
QGraphicsRectItem* item = new QGraphicsRectItem(QRectF(0,0,100,100));
scene.addItem(item);
view.ensureVisible(scene.sceneRect());
view.show();
return a.exec();
}
我跟着Qt的例子 - 對掐:Image Gestures Example。我看不到我缺少的重要部分 - 但我看不到任何結果。
這是很難排除故障 - 沒有斷點或qDebug
- 所以我用了QMessageBox
,一個簡單的文本放在pinchTriggered()
的開頭 - 它從未顯示。
我嘗試了2種不同的設備 - Surface Pro 3和自定義Android設備。
對於兩者,我都能夠成功實現手勢QTapAndHoldGesture
(使用相同的邏輯)。
所以...看來,
QGesture *pinch = event->gesture(Qt::PinchGesture)
總是NULL
...
我希望有人能找到我的小樣本中的錯誤。我忽略了什麼?或者是否需要在設備中進行一些設置?
謝謝,我會嘗試下一次我可以在觸摸屏設備上獲得這個,如果它做出改變,我會接受。 – Thalia
這個'setAttribute'調用不起作用。 'grabGesture()'已經爲你做了。 – RyanCu