ããã«ã¡ã¯ ãã®èšäºã¯ãSailfish OSãå®è¡ããããã€ã¹ã»ã³ãµãŒã®äœ¿çšã«é¢ãã倧ããªèšäºã®ç¬¬2éšã§ãã æåã®éšåã¯
ããããå
¥æã§ã
ãŸã ã
åŸæã»ã³ãµãŒ
ååã瀺ãããã«ãè§åºŠã»ã³ãµãŒã¯ããã€ã¹ã®è§åºŠã決å®ããŸãã åŸææž¬å®çšã®ã³ã³ããŒãã³ãã®ç¶æ³ã¯ãå
ã»ã³ãµãŒã«äŒŒãŠããŸãããã1ã€ã®ãã¹ããŒããã³ã³ããŒãã³ãã§ãã
RotationSensorãšãããã»ã©é«åºŠã§ã¯ãªãåå¿
-OrientationSensorããããŸãã
RotationReadingã¯ã3ã€ã®åº§æšè»žã«å¯Ÿããæ£ç¢ºãªåŸæè§ã«é¢ããæ
å ±ãæäŸããŸãïŒxããããã£ã«ã¯ã¹ããŒããã©ã³ã®çžŠè»žãæ°Žå¹³äœçœ®ããã©ãã ãé¢ããŠãããã«é¢ããæ
å ±ãå«ãŸããyããããã£ã«ã¯æšªè»žã«é¢ããåãæ
å ±ãå«ãŸããŸããz-ç»é¢ã®äžå¿ã«å¯Ÿããå転ã«é¢ããæ
å ±ã ããã¯ç»åã§ããæç¢ºã«èŠãããšãã§ããŸãïŒ
ãããã®å€ã¯ãããã€ã¹ã®ç»é¢äžã®å³åžã®ããŒãã«ã§èŠãããšãã§ããŸãã
RotationSensor { id: rotationSensor active: true } Column { Label { text: "x: " + rotationSensor.reading.x } Label { text: "y: " + rotationSensor.reading.y } Label { text: "z: " + rotationSensor.reading.z } }
è§åºŠzã®å€ã®æ±ºå®ã¯ãåžžã«å©çšã§ãããšã¯éããŸããã ãã®å€ã®å¯çšæ§ã倿ããã«ã¯ã
RotationReadingã³ã³ããŒãã³ãã®
hasZããããã£ã確èªããå¿
èŠããããŸãã
OrientationSensorã¯ ãæ©èœæ§ã®äœãã³ã³ããŒãã³ããšããŠãéèŠãªè³ªåãã¹ããŒããã©ã³ã®é¡ã¯äœãäžã«åããŠããŸãããã«çããããšãã§ããŸãã ãããã£ãŠã6ã€ã®å€ãåãããšãã§ããåå€ã¯é¡ã«å¯Ÿå¿ããŸãã ããã«ãäœçœ®ã決å®ã§ããªãããšã瀺ã1ã€ã®è¿œå å€ã ãããã®å€ã¯æ¬¡ã®ãªã¹ãã«ãããŸãã
- OrientationReading.Undefined-ããã€ã¹ã®å Žæãç¹å®ã§ããŸããã
- OrientationReading.TopUp-äžé¢ã¯äžãåããŠããã
- OrientationReading.TopDown-åºé¢ãäžãåããŠããïŒéããŸïŒã
- OrientationReading.LeftUp-å·ŠåŽãäžãåããŠããã
- OrientationReading.RightUp-å³åŽãäžã
- OrientationReading.FaceUp-ããã€ã¹ã¯ç»é¢ãäžã«ããŠé
眮ããã
- OrientationReading.FaceDown-ããã€ã¹ã¯ç»é¢äžã«ãããŸãã
ããšãã°ãããã€ã¹èªäœã®äœçœ®ã倿Žãããšãã«ç»åã®åããç¶æããããã«ã
OrientationSensorã䜿çšã§ããŸãã
OrientationSensor { id: orientationSensor active: true } Image { anchors.centerIn: parent source: "http://social.fruct.org/content/img/fruct.png" transform: Rotation { angle: rotationAngle() } } function rotationAngle() { switch (orientationSensor.reading.orientation) { case OrientationReading.TopUp: return 0; case OrientationReading.RightUp: return 90; case OrientationReading.TopDown: return 180; case OrientationReading.LeftUp: return 270; default: return 0; } }
äžèšã®äŸã§ã¯ãããŽã¯äžã®ã¹ããŒããã©ã³ã®ç«¯ã«é¢ããŠããŸãïŒ
ç£åèš
ç£åèšã¯QMLã¿ã€ãã®ç£åèšã§è¡šãããXãYãããã³Zè»žã«æ²¿ã£ãããã€ã¹ã®åšå²ã®ç£å ŽåŒ·åºŠã«é¢ããæ
å ±ãæäŸããŸãã
ç£åèšã¯ãããã€ã¹ã®åšå²ã®ç£å Žã®åŒ·åºŠãšãå°ç£å Žã®ã¿ã®åŒ·åºŠã®äž¡æ¹ã«å¿çã§ããŸãã ãã®åäœã¯
returnGeoValuesããããã£ã«ãã£ãŠå¶åŸ¡ããã
trueãŸãã¯
falseãåãå
¥ããããšãã§ã
ãŸã ã æåã¯
åœã§ãããè¿ãã®ç£å Žã«åå¿ããŸãã ããã2ã€ã®ã¢ãŒãã®éãã¯ã
returnGeoValuesããªã³
ã«ãããšãã»ã³ãµãŒãå°äœãç£ç³ãé»åããã€ã¹ãªã©ã®ç£å Žæºããçºçããå€éšç£å Žã®åœ±é¿ãæé€ããå°çã®èªç¶ç£å Žã«çŠç¹ãåãããããšããããšã§ãã ãã¡ãããå€éšç£å Žã®åœ±é¿ãå®å
šã«æé€ããããšã¯äžå¯èœã§ãããããã»ã³ãµãŒã®èªã¿åãå€ã¯æ°ãããœãŒã¹ã衚瀺ããããšãã«å€æŽãããŸãã
MagnetometerReadingãªããžã§ã¯ãã«ã¯ã軞æ¹åã®åŒµåãå«ãããªãã¿ã®ããããã£
x ã
y ãããã³
zã«å ããŠã
calibrationLevelããããã£-å°ç£æ°åŒ·åºŠã®æž¬å®ç²ŸåºŠã®ã¬ãã«ããããŸãã ãã®ãã©ã¡ãŒã¿ãŒã¯ãã»ã³ãµãŒãã£ãªãã¬ãŒã·ã§ã³ã¬ãã«ã«å¿ããŠ0ãã1ãŸã§ã®å€ãåãå
¥ãã
returnGeoValuesã«
trueãå«ãŸããŠããå Žåã«ã®ã¿å€ã倿ŽããŸãã ãã®ç¹æ§ã¯ãç£å Žãå°ç£æ°ã®æž¬å®ã«ã©ãã ã匷ã圱é¿ããããåæ ããŠããŸãã 圱é¿ã倧ããå Žåãå€ã¯ãŒãã«ãªããŸãã æž¬å®ç²ŸåºŠãè¿ãã«ã¯ãã»ã³ãµãŒãèŒæ£ããå¿
èŠããããŸãã éåžžãããã¯ã8çªã®ååŒ§ã«æ²¿ã£ãŠããã€ã¹ãå転ãããããåã«ç©ºéå
ã®ããŸããŸãªæ¹åã«ããã€ã¹ãæ¯ã£ãŠè¡ããŸãã 粟床ãäœãå Žåãã»ã³ãµãŒã®å€ã¯å®éã®å€ãšã¯å€§ããç°ãªããŸãã ããã¯ãç£åèšãã³ã³ãã¹ãšããŠäœ¿çšããå Žåã«ç¹ã«åœãŠã¯ãŸããŸãã
ã³ã³ãã¹
ã³ã³ãã¹ã³ã³ããŒãã³ãã¯ãé»åã³ã³ãã¹ãšããŠæ©èœããŸãã ãã®èªã¿åãããããã£ã«ã¯ãããã€ã¹ã®æ¹äœè§ã«é¢ããæ
å ±ãæäŸãã
CompassReadingãªããžã§ã¯ããå«ãŸããŠ
ããŸããåç£æ¥µãšæèšåãã®ããã€ã¹ã®X軞ãšã®éã®è§åºŠã§ãã ãã®æ
å ±ã¯ãç£åèšã®èªã¿åãå€ã®ããã«ãå°ç£æ°ããŒã¿ã«åºã¥ããŠããŸãã ãã®ç¹ã§ãã³ã³ãã¹ã¯ããŸããŸãªå¹²æžãåããããããã£ãªãã¬ãŒã·ã§ã³ãå¿
èŠã§ãã
CompassReadingã«ã¯2ã€ã®ããããã£ããããŸãã
- æ¹äœè§ ïŒ qreal-å°çã®åç£æ¥µãšã¹ããŒããã©ã³ã®äžé¢ãæããŠããæ¹åãšã®éã®æ°Žå¹³è§ã
- calibrationLevel ïŒ qreal-ã»ã³ãµãŒèªã¿åãå€ã®ç²ŸåºŠãMagnetoometerReadingã¿ã€ãã®calibrationLevelããããã£ã«å®å
šã«äŒŒãŠããŸã ã
ã»ã³ãµãŒãã£ã«ã¿ãªã³ã°
äžéšã®ã»ã³ãµãŒã®èªã¿åãå€ã¯ã1ç§éã«äœåºŠãå€åããå ŽåããããŸãã ã·ã°ãã«ãšã¹ãããã䜿çšããæšæºã®Qtéç¥ã¡ã«ããºã ã䜿çšãããšãå€ãååŸããããã»ã¹ã倧å¹
ã«é
ããªããäžè¬çãªæž¬å®ã®ç²ŸåºŠãäœäžããŸãã ä¿¡å·ã䜿çšããŠã»ã³ãµãŒå€ãååŸãã代ããã«ã
QSensorFilterã¯ã©ã¹ããããŸãã ãã®ã¯ã©ã¹ã¯ãã³ãŒã«ããã¯é¢æ°ãå®è£
ããã€ã³ã¿ãŒãã§ã€ã¹ã§ããã³ãŒã«ããã¯é¢æ°ã¯ã眲åãããã»ã³ãµãŒã¯ã©ã¹ã«ããæ°ããèªã¿åãå€ã®åä¿¡æã«åŒã³åºãããŸãã ãã®æ©èœã®æ³šç®ãã¹ãç¹åŸŽã¯ãå
¥ã£ãŠããã»ã³ãµãŒã®æž¬å®å€ã倿Žããããã«ãã£ãŠ
èªã¿åãããããã£ã®æçµå€ã倿ã§ããããšã§ãã ãŸãã1ã€ã®ã»ã³ãµãŒã«è€æ°ã®ãã£ã«ã¿ãŒãæããããšãã§ãããããå€ãä»ãããã¹ãŠã®å€æããã£ã«ã¿ãŒã䜿çšããŠå®è¡ããåºåã§ç®çã®çµæãåŸãããšãã§ããŸãã
Qt Sensors APIã®ä»ã®èŠªã¯ã©ã¹ãšåæ§ã«ã
QSensorFilterã«ã¯ã¡ãœããã®ãŠãããŒãµã«ã»ããã®ã¿ããããŸãã
- ãããªãã¯ããŒã«ãã£ã«ã¿ãŒïŒQSensorReading * readingïŒ -ã»ã³ãµãŒããæž¬å®å€ãåä¿¡ãããšãã«åŒã³åºããããŸãã«ã³ãŒã«ããã¯é¢æ°ã ãã®äžã§ãå€ãååŠçã§ããŸãã ãã®é¢æ°ãtrueãè¿ãå Žå ãèªã¿åãå€ã¯æ¬¡ã®ãã£ã«ã¿ãŒïŒããå ŽåïŒã«æž¡ãããããèªã¿åãããããã£ãŒã倿Žããããšããã·ã°ãã«ãçºè¡ãããŸãã falseãè¿ããããšãçŸåšã®ã»ã³ãµãŒèªã¿åãã®åŠçã忢ããŸãã
- protected void setSensorïŒQSensor * sensorïŒ -ãã£ã«ã¿ãŒèªäœãããã£ã«ã¿ãŒãã¢ã¿ãããããã»ã³ãµãŒã¯ã©ã¹ãæå®ã§ããŸãã
ç¹å®ã®ã¿ã€ãã®ã»ã³ãµãŒã«åºæã®ã¡ãœããã¯ãåŸç¶ã¯ã©ã¹ã§ãã§ã«å®è£
ãããŠããŸãã
Readingã¿ã€ãã®ãªããžã§ã¯ããšåæ§ã«ãåã»ã³ãµãŒã«ã¯ç¬èªã®ãã£ã«ã¿ãŒããããŸãã ããšãã°ã
QAccelerometerã¯ã©ã¹ã
é¢é£ä»ããããŠããå é床èšã«ã¯
QAccelerometerFilterãã£ã«ã¿ãŒãããããã®
ãã£ã«ã¿ãŒã¡ãœããã¯æ¬¡ã®åœ¢åŒãåããŸãã
bool filter(QAccelerometerReading *reading)
ãã®èŠªã®ã¡ãœãããšã¯ç°ãªãããã©ã¡ãŒã¿ãšããŠå é床èšã®æž¬å®å€ãæã€ãªããžã§ã¯ããåãåããŸãã åãããšãä»ã®ã¿ã€ãã®ãã£ã«ã¿ãŒã«ãåœãŠã¯ãŸããŸãã
ãã£ã«ã¿ãŒã¯ãã¯ã©ã¹ã»ã³ãµãŒã¡ãœããã䜿çšããŠå¶åŸ¡ãããŸãã ãããè¡ãããã«ã
QSensorsã«ã¯ ãäžé£ã®ãã³ãã©ãŒã管çã§ããå€ãã®æ©èœããããŸãã
- void addFilterïŒQSensorFilter * filterïŒ -æå®ããããã£ã«ã¿ãŒããªã¹ãã®æåŸã«è¿œå ããŸãã ãã®å Žåã1ã€ã®ãã£ã«ã¿ãŒããªã¹ãã«è€æ°åå«ããããšãã§ããŸãã
- void removeFilterïŒQSensorFilter * filterïŒ -ãªã¹ãããæå®ããããã£ã«ã¿ãŒã®æåã«èŠã€ãã£ããªã«ã¬ã³ã¹ãåé€ããŸãã
- QList <QSensorFilter *> filtersïŒïŒconst-ã»ã³ãµãŒããµãã¹ã¯ã©ã€ãããããã¹ãŠã®ãã£ã«ã¿ãŒãžã®ãã€ã³ã¿ãŒã®ãªã¹ãã ãã³ãã©ãŒé¢æ°ã®åŒã³åºãã¯ããªã¹ãå
ã®äœçœ®ã®æé ã§çºçããŸãã
ä»ã®Qt Sensors APIã¯ã©ã¹ãšã¯ç°ãªãããã£ã«ã¿ãŒã«ã¯æåã¯QMLã³ãŒãããããããæäœããããã®ã€ã³ã¿ãŒãã§ãŒã¹ããããŸããã ãŸããç¹å®ã®ã»ã³ãµãŒã®ãã£ã«ã¿ãŒã»ãããå¶åŸ¡ããæ¹æ³ã¯ãQMLããçŽæ¥äœ¿çšããããšãã§ããŸããã
ãã£ã«ã¿ãŒã®äœ¿çšäŸãšããŠãå é床èšã¢ãŒã
QAccelerometer :: Userããã³
QAccelerometer :: Gravityã®å®è£
ãæ€èšã§ããŸãã ãã®ãã£ã«ã¿ã¯ã
Combined以å€ã®å é床èšã¢ãŒãããµããŒãããŠããªãããã€ã¹ã§åœ¹ç«ã¡ãŸãã ãã®ããã«ã¯ãå転ã»ã³ãµãŒ
RotationSensorãåŒãä»ããå¿
èŠããããŸãã
å®è£
ãé²ããåã«ãå é床èšã®åäœã¢ãŒãã«ã€ããŠããã€ãã®æç¢ºãªèšèãæ¿å
¥ããå¿
èŠããããŸãïŒéåã«ããå é床ãšãŠãŒã¶ãŒã«ããããã€ã¹ã®åãã«ããå é床ã¯ãããã€ã¹ãç©ççã«åºå¥ã§ããŸãããã»ãšãã©ã®ããã€ã¹ã¯ãããã€ãã®ã»ã³ãµãŒã®ã·ã¹ãã ãšãéåã«ããå é床ã«é¢ããæ
å ±ãèšç®ã«äœ¿çšããŸãéåã®ã¿ã®åœ±é¿ã ãããŠããã®æ
å ±ã¯ããŠãŒã¶ãŒãåŒãèµ·ãããå é床ã®èšç®ã«ã䜿çšãããŸãã ãã®ã¢ãããŒãã䜿çšããŠã
éåã¢ãŒããš
ãŠãŒã¶ãŒã¢ãŒããå®è£
ããŸãã
æåã®ã¹ãããã¯ã
QAccelerometerFilterããç¶æ¿ããããã£ã«ã¿ãªã³ã°ã¯ã©ã¹ãäœæããããš
ã§ã ã ãã®äžã§ãããã«Gã®å€ïŒéåå é床ïŒãèšå®ããŸãã
#define G 9.80665 #include <QtSensors> #include <math.h> class AccelerationModeFilter : public QAccelerometerFilter { public: AccelerationModeFilter(); bool filter(QAccelerometerReading *reading); void setAccelerationMode(QAccelerometer::AccelerationMode accelerationMode); QAccelerometer::AccelerationMode getAccelerationMode(); private: QRotationSensor rotationSensor; QAccelerometer::AccelerationMode accelerationMode; };
ã¯ã©ã¹ã«ã¯2çš®é¡ã®ããããã£ãå¿
èŠã§ã
ãQRotationSensor-å転ã»ã³ãµãŒãããã䜿çšããŠã空éå
ã®ããã€ã¹ã®äœçœ®ã決å®ããŸãã
QAccelerometer :: AccelerationMode-å é床èšã®å€ã枬å®ããã¢ãŒãããã®å€ã«åŸã£ãŠãå€ã®èšç®ã«å¿
èŠãªæ¹æ³ãéžæãããŸãã
座æšè»žäžã®å éåºŠã®æåœ±ãèšç®ãããšãããµã€ã³ãã³ãµã€ã³ãåããªã©ã®äžè§æŒç®ã«é Œãå¿
èŠããã°ãã°ãããŸãã ãã®ããã«ãæšæºã©ã€ãã©ãªC
math.hãšãã®ã¡ãœãã
sinïŒïŒããã³
cosïŒïŒã䜿çšãããŸãã ãããã®ã¡ãœããã¯è§åºŠå€ãã©ãžã¢ã³ã§ååŸããŸãããã»ã³ãµãŒã¯å€ã床åäœã§æäŸããŸãã ãããã£ãŠãè§åºŠå€ã床ããã©ãžã¢ã³ã«å€æããå°ããªæ¹æ³ãéå§ããŸãã
qreal toRadian(qreal degree) { return degree * M_PI / 180; }
å é床èšç®ã¢ãŒãã¯ãã¯ã©ã¹ã³ã³ã¹ãã©ã¯ã¿ãŒã§ãåŸæã»ã³ãµãŒãåæåããã³ã¢ã¯ãã£ãåããã®ãšåãå Žæã§èšå®ãããŸãã
AccelerationModeFilter::AccelerationModeFilter() : rotationSensor() { rotationSensor.setActive(true); }
æãéèŠãªéšåã¯ãèšç®ãå®è¡ããã
ãã£ã«ã¿ãŒã¡ãœãã
ïŒQAccelerometerReading * readingïŒãåå®çŸ©ããããšã§ãã
bool AccelerationModeFilter::filter(QAccelerometerReading* reading) { switch (accelerationMode) { case QAccelerometer::Gravity: reading->setX(G * sin(toRadian(rotationSensor.reading()->y()))); reading->setY(- G * sin(toRadian(rotationSensor.reading()->x()))); reading->setZ(- zAxisAcceleration(rotationSensor.reading()->x(), rotationSensor.reading()->y())); break; case QAccelerometer::User: reading->setX(reading->x() - G * sin(toRadian(rotationSensor.reading()->y()))); reading->setY(reading->y() + G * sin(toRadian(rotationSensor.reading()->x()))); reading->setZ(reading->z() + zAxisAcceleration(rotationSensor.reading()->x(), rotationSensor.reading()->y())); break; } return true; } void AccelerationModeFilter::setAccelerationMode(QAccelerometer::AccelerationMode accelerationMode) { this->accelerationMode = accelerationMode; } QAccelerometer::AccelerationMode AccelerationModeFilter::getAccelerationMode() { return accelerationMode; }
switchã¹ããŒãã¡ã³ãã§ã¯ ããããã¯
ãéžæããŸããåãããã¯ã¯ãå éåºŠãæž¬å®ããç¬èªã®ã¢ãŒããæ
åœããŸãããã®ãããªã¢ãŒãã«ã¯ã
éåãš
ãŠãŒã¶ãŒã® 2ã€ããã
ãŸã ã å€ã¯æåã¯ãã®ã¢ãŒãã§äœ¿çšãããããã
Combinedãã¹ãããã§ããŸãã
switchã¹ããŒãã¡ã³ãã®ãããã¯ã§ã¯ãå軞ã®å é床å€ãåèšç®ãããŸããå€ã¯ãæž¡ãããåŒæ°
èªã¿åãã®ããããã£ã«æžã蟌ãŸããŸãã X軞ãšYè»žã«æ²¿ã£ãå é床ãèšç®ããã«ã¯ãéåå é床ã«ã¹ããŒããã©ã³ãšåº§æšå¹³é¢ã®å¯Ÿå¿ãã軞ãšã®éã®è§åºŠã®ãµã€ã³ãæããã ãã§ããZè»žã«æ²¿ã£ãå é床ãèšç®ããã«ã¯ã倿è¡åã䜿çšããå¿
èŠããããŸãã ãããå¥ã®ã¡ãœããã§å®è£
ããŸãïŒ
qreal zAxisAcceleration(qreal xDegree, qreal yDegree) { qreal xRadian = toRadian(xDegree); qreal yRadian = toRadian(yDegree); double zCoordinates[3] = {0, 0, G}; double rotationValues[9] = { -cos(xRadian), 0, sin(xRadian), sin(yRadian) * sin(xRadian), cos(yRadian), -sin(yRadian) * cos(yRadian), -cos(yRadian) * sin(xRadian), sin(yRadian), cos(yRadian) * cos(xRadian) }; QGenericMatrix<1, 3, double> zVector(zCoordinates); QGenericMatrix<3, 3, double> rotationMatrix(rotationValues); return (rotationMatrix * zVector)(2, 0); }
ãžãªã¡ããªã®ã¬ãã¹ã³ããªãã®ã§ããããªãã¯ã¹ããã®ããã«èŠããçç±ã説æããå¿
èŠã¯ãªããšæããŸãããèå³ã®ãã人ã¯ãã€ã§ã
ãŠã£ãããã£ã¢ã«é Œãããšãã§ããŸãã
éåã¢ãŒãã®å Žåãèšç®ããã軞æ¹åã®å é床å€ã¯ã
èªã¿åããªããžã§ã¯ãã®å¯Ÿå¿ããããããã£ã«åçŽã«æžã蟌ãŸããŸãããã®å Žåãå é床å€ã¯ããã€ã¹ã®äœçœ®ã®ã¿ã«äŸåããããã§ãã
ãŠãŒã¶ãŒã¢ãŒãã§å€ã決å®ããã«ã¯ãååŸããèšç®ã®çµ¶å¯Ÿå€ãå é床èšã®èªã¿åãå€ããå·®ãåŒãå¿
èŠããããŸããããã«ãããã»ã³ãµãŒæž¬å®å€ãžã®éåã®åœ±é¿ãæé€ã§ããŸãã
ããã§ãã£ã«ã¿ãŒã®å®è£
ãå®äºããç®çã®å é床èšã«æ¥ç¶ããŠã2ã€ã®æ°ããã¢ãŒãã䜿çšããŸãã
#include <QtSensors> #include "accelerometerfilterexample.h" class AccelerometerWithFilter : public QAccelerometer { Q_OBJECT public: AccelerometerWithFilter() : filter() { setActive(true); addFilter(&filter); connect(this, &AccelerometerWithFilter::accelerationModeChanged, [=](AccelerationMode accelerationMode) {this->filter.setAccelerationMode(accelerationMode);}); } private: AccelerationModeFilter filter; };
ãããã«
ãã®èšäºããã³
以åã®èšäºã§ã¯ãSailfish OSãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§äœ¿çšå¯èœãªäž»èŠãªã»ã³ãµãŒã«ã€ããŠèª¬æããŸãã äžèšã®äŸã¯éåžžã«åºæ¬çãªãã®ã§ãããèªè
ã«Qt Sensors APIã®æ©èœãçè§£ããã¢ããªã±ãŒã·ã§ã³éçºã§ãã©ã°ã€ã³ã䜿çšããå¯èœæ§ã瀺ãå¿
èŠããããŸãã
æè¡çãªåé¡
ã¯ããã·ã¢èªã話ãã³ãã¥ããã£ã®Sailfish OSã®TelegramãŸãã¯
VKontakteã°ã«ãŒãã®
ãã£ãã«ã§ãè°è«ã§ããŸãã
èè
ïŒããã·ã ã³ã¹ããªã³