QGraphicsView に追加したいくつかの QWidget でマルチタッチを動作させるのに苦労しています。QGraphicsScene と QGraphicsView を設定する QWidget のサブクラスを作成しました。これは私の(テスト)QWidgetのサブクラスです:
#include "qttest1.h"
#include <QtWidgets>
#include <QTouchEvent>
qttest1::qttest1(QWidget *parent)
: QWidget(parent)
{
setEnabled(true);
if(!QCoreApplication::testAttribute(Qt::AA_DontCreateNativeWidgetSiblings))
setAttribute(Qt::WA_NativeWindow);
setAttribute(Qt::WA_AcceptTouchEvents);
scene = new QGraphicsScene(this);
scene->setSceneRect(0, 0, 1920, 1080);
graphicsView = new QGraphicsView(scene, this);
graphicsView->setRenderHints(QPainter::Antialiasing);
graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
graphicsView->setAttribute(Qt::WA_AcceptTouchEvents);
graphicsView->viewport()->setAttribute(Qt::WA_AcceptTouchEvents);
QBoxLayout *layout = new QVBoxLayout;
layout->addWidget(graphicsView);
setLayout(layout);
}
qttest1::~qttest1() {}
void qttest1::showGraphics()
{
for(int i = 0; i < 10; i++)
{
Dial *dial = new QDial();
dial->move(i * 120 + 50, 200);
dial->resize(120, 120);
dial->setAttribute(Qt::WA_AcceptTouchEvents);
QGraphicsProxyWidget *proxy = scene->addWidget(dial);
proxy->setAcceptTouchEvents(true);
}
}
これが私のメインです:
int main(int argc, char **argv)
{
QApplication app(argc, argv);
app.setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
QRect rect = app.desktop()->screenGeometry();
qttest1 test;
test.resize(rect.width(), rect.height());
test.showFullScreen();
test.showGraphics();
return app.exec();
}
コードがきれいではなく、おそらく少しリークしていることはわかっていますが、ポイントはマルチタッチを機能させることです。
シーンに追加するあらゆる種類のウィジェットを表示して使用できますが、ダイヤルに触れるとすぐに、最初のタッチ以降のすべてのタッチが飲み込まれます。これにより、ダイヤルがいくつかの位置の間でジャンプします。私が望むのは、すべてのダイヤル (または任意のタイプのウィジェット) を個別に同時に使用できることです。QT 5.0.2、Windows 8、最大 10 タッチをサポートするモニターを使用しています。