QGraphicsView에 추가 한 몇 가지 QWidget에서 멀티 터치를 사용하는 데 어려움을 겪고 있습니다. QGraphicsScene과 QGraphicsView를 설정하는 QWidget의 하위 클래스를 만들었습니다. 이는 QWidget의 내 (테스트) 서브 클래스 : 이것은QGraphicsView, Windows 8의 Qt 5.0.2에서 멀티 터치를 사용하는 방법
#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 개의 터치를 지원하는 모니터와 함께 사용하고 있습니다.
필자가 작성한 작은 예제에서 QGraphicsView 내에서 멀티 터치 작업을 보았습니다. 그러나 문제는 아니지만 문제는 위젯이 동시에 작동하지 않는다는 것입니다. 예 : 두 개의 QSlide를 QGraphicsScene에 추가하고 동시에 (터치를 사용하여) 사용하려고하면 처음 만진 것만이 작동합니다. QGraphicsScene (및 QGraphicsView)을 사용하지 않고 테스트 할 때도 문제가있는 것 같지만 실제 결론을 이끌어 낼만큼 충분히 테스트하지는 않았습니다. 내가 원하는대로 내 자신의 위젯/graphisitems 그것을 구현해야 구현 말하고 있습니까? –
QSlide가 QGraphicsItem 또는 Object가 아니므로 QGraphicsProxyWidget을 통해 사용하고 있습니까? 그렇다면 실제 위젯으로 전달되지 않는 다양한 것들이 있으며이 중 하나 일 수 있습니다. 귀하의 질문에 관해서는 네, 멀티 터치에 대한 응답으로 특정 동작을 정의하려면 GraphicsItem에서 상속해야합니다. 적어도 Qt 4.8에서 사용했을 때했던 것입니다. – TheDarkKnight
예, QGraphicsProxyWidget을 통해 사용합니다.QGraphicsScene 내부의 위젯에 건드리지 않을 것 같은 것을 받아 들일 수 있지만 이상한 점은 예를 들어 QSearch를 QGraphicsScene에 추가하면 예상대로 작동하지만 동시에 두 개의 QSlides를 사용하면 작동하지 않습니다. –