Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fichier texte QT

Sujet résolu
    1 février 2016 à 16:33:17

    Yo les zéros !

    Voilà j'ai un programme qui écrit des phrases en continue dans un fichier texte, pour être plus précis je récupère les data d'un SpaceNavigator sur la translation X Y Z et Rotation X Y Z en direct.

    Ces informations je voudrais les récupérer et tout simplement les afficher dans un Text Edit. Mon soucis c'est que j'arrive à n'afficher que la première ligne alors que je voudrais afficher à chaque fois la dernière ligne qui représente le dernier mouvement. 

    Je récupère ce genre d'info  =>   0:0:40:35:40:0:50     qui correspond à     TX:TY:TZ:RX:RY:RZ:P

    Voilà 2 bout de code :

    - Le premier c'est le remplissage en continue du .txt (dans le main) :

    int i = 0;
        while(i<7)
        {
            QFile f("test.txt");
            if(!f.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Append))
                QMessageBox::critical(NULL,"Erreur","Erreur !!!");
    
            QTextStream out(&f);
    
            switch (i) {
            case 0: out << pEvent->u.spwData.mData[SI_TX];
                break;
            case 1: out << ":" << pEvent->u.spwData.mData[SI_TY];
                break;
            case 2: out << ":" << pEvent->u.spwData.mData[SI_TZ];
                break;
            case 3: out << ":" << pEvent->u.spwData.mData[SI_RX];
                break;
            case 4: out << ":" << pEvent->u.spwData.mData[SI_RY];
                break;
            case 5: out << ":" << pEvent->u.spwData.mData[SI_RZ];
                break;
            case 6: out << ":" << pEvent->u.spwData.period << endl;
                break;
            default:
                break;
            }
    
            f.close();
            i++;
        }

    Le deuxième c'est l'affichage sur mon ui (dans le mainwindows):

    QFile f("C:/Users/Valise FH Airbus/Desktop/Projet_Apprenti/Periode_2/build-space_navigator-Desktop_Qt_5_4_2_MSVC2013_64bit-Debug/test.txt");
        if(f.open(QIODevice::ReadOnly) | QIODevice::Text)
        {
            QTextStream flux(&f);
            while(!f.atEnd())
            {
                QString line = flux.readLine();
                QStringList plit0 = line.split(":");
    
                if(plit0.size() != 7){
                    return;
                }
                ui->TX->setPlainText(plit0[0]);
                ui->TY->setPlainText(plit0[1]);
                ui->TZ->setPlainText(plit0[2]);
                ui->RX->setPlainText(plit0[3]);
                ui->RY->setPlainText(plit0[4]);
                ui->RZ->setPlainText(plit0[5]);
            }
        }

    Quelqu'un voit ce que je dois faire ? (Aussi c'est vonlontaire de ne pas afficher le "P" mais ça n'a rien à voir avec mon problème)

    -
    Edité par Antoine Magalhaes 2 février 2016 à 10:50:34

    • Partager sur Facebook
    • Partager sur Twitter
      2 février 2016 à 9:18:21

      Désolé si c'est trop tôt mais je dois me dépêcher donc UP!

      Je trouve vraiment pas la solution si vous voulez plus d'info dîtes le moi :) !

      -
      Edité par Antoine Magalhaes 2 février 2016 à 9:18:57

      • Partager sur Facebook
      • Partager sur Twitter
        2 février 2016 à 10:36:18

        Pourquoi écrire dans un fichier et le relire ? Oo C'est super lent ! ^^

        Pourquoi ne pas faire directement ceci ?

        ui->TX->setPlainText(pEvent->u.spwData.mData[SI_TX]);
        ui->TY->setPlainText(pEvent->u.spwData.mData[SI_TY]);
        ui->TZ->setPlainText(pEvent->u.spwData.mData[SI_TZ]);
        ui->RX->setPlainText(pEvent->u.spwData.mData[SI_RX]);
        ui->RY->setPlainText(pEvent->u.spwData.mData[SI_RY]);
        ui->RZ->setPlainText(pEvent->u.spwData.mData[SI_RZ]);



        • Partager sur Facebook
        • Partager sur Twitter
          2 février 2016 à 10:48:27

          Oui c'est vrai je ne vous ai pas expliqué pourquoi !

          En fait pour récupérer les data du SpaceNavigator j'ai du récupérer des bout de code à positionner dans le main.cpp, or je ne crois pas que l'on puisse communiquer avec le ui dans le main et après plusieurs tentative transférer le code dans le mainwindows s'avère très compliqué. 

          C'est pourquoi j’enregistre les data dans un bloc note via le main et je les récupère dans le mainwindows.cpp grâce à celui-ci.

          -
          Edité par Antoine Magalhaes 2 février 2016 à 10:49:18

          • Partager sur Facebook
          • Partager sur Twitter
            2 février 2016 à 11:04:33

            Et voila l'erreur.

            Ton main est exécuté une fois (d'où le fait que tu ai que les première valeur). Et donc tu ne mais jamais à jour ton fichier. Logiquement il n'y a qu'une ligne dans ton fichier.

            Peut tu nous envoyer plus de code ? Genre la QMainWindow qui contient tes QWidget d'affichage ?

            • Partager sur Facebook
            • Partager sur Twitter
              2 février 2016 à 11:16:41

              Je n'ai pas bien saisi ce que tu me demandes, enfin à quoi correspond "QMainWindow" du coup jte donne tout mes MainWindows :

              mainwindow.h

              #ifndef MAINWINDOW_H
              #define MAINWINDOW_H
              
              #include <QMainWindow>
              
              namespace Ui {
              class MainWindow;
              }
              
              class MainWindow : public QMainWindow
              {
                  Q_OBJECT
              
              public:
                  explicit MainWindow(QWidget *parent = 0);
                  ~MainWindow();
              
              private slots:
                  void on_pushButton_clicked();
              
              private:
                  Ui::MainWindow *ui;
              
                  int Quit = 0;
              };
              
              #endif // MAINWINDOW_H
              

              mainwindow.cpp

              #include "mainwindow.h"
              #include "ui_mainwindow.h"
              #include <QString>
              #include <QFile>
              #include <QList>
              #include <QTextStream>
              
              MainWindow::MainWindow(QWidget *parent) :
                  QMainWindow(parent),
                  ui(new Ui::MainWindow)
              {
                  ui->setupUi(this);
                  connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(close()));
              
                  QFile f("C:/Users/Valise FH Airbus/Desktop/Projet_Apprenti/Periode_2/build-space_navigator-Desktop_Qt_5_4_2_MSVC2013_64bit-Debug/test.txt");
              
                  if(f.open(QIODevice::ReadOnly) | QIODevice::Text)
                  {
                      QTextStream flux(&f);
                      while(!f.atEnd())
                      {
                          QString line = flux.readLine();
                          QStringList plit0 = line.split(":");
                          QString TX = plit0.at(0);
                          QString TY = plit0.at(1);
                          QString TZ = plit0.at(2);
                          QString RX = plit0.at(3);
                          QString RY = plit0.at(4);
                          QString RZ = plit0.at(5);
              
                          if(plit0.size() != 7){
                              return;
                          }
                          ui->TX->setPlainText(TX);
                          ui->TY->setPlainText(TY);
                          ui->TZ->setPlainText(TZ);
                          ui->RX->setPlainText(RX);
                          ui->RY->setPlainText(RY);
                          ui->RZ->setPlainText(RZ);
                      }
                  }
              }
              
              MainWindow::~MainWindow()
              {
                  delete ui;
              }
              
              void MainWindow::on_pushButton_clicked()
              {
                  exit(0);
              }

              mainwindow.ui

              Sinon le main étant trop long il n'y a que le bout de code partagé précédemment qui est utile je pense. 



              • Partager sur Facebook
              • Partager sur Twitter
                2 février 2016 à 11:43:20

                Quel est le type de pevent ?

                Tu utilise tes fonction dans tes constructeurs. Ton affichage est donc mis à jour qu'une fois et pas à chaque frames.

                Tu dois faire un truck comme ça : 

                #ifndef MAINWINDOW_H
                #define MAINWINDOW_H
                 
                #include <QMainWindow>
                 
                namespace Ui {
                class MainWindow;
                }
                 
                class MainWindow : public QMainWindow
                {
                    Q_OBJECT
                 
                public:
                    explicit MainWindow(QWidget *parent = 0);
                    ~MainWindow();
                
                	bool event(QEvent* event) {
                		ui->TX->setPlainText(event->u.spwData.mData[SI_TX]);
                		ui->TY->setPlainText(event->u.spwData.mData[SI_TY]);
                		ui->TZ->setPlainText(event->u.spwData.mData[SI_TZ]);
                		ui->RX->setPlainText(event->u.spwData.mData[SI_RX]);
                		ui->RY->setPlainText(event->u.spwData.mData[SI_RY]);
                		ui->RZ->setPlainText(event->u.spwData.mData[SI_RZ]);
                		return QMainWindow::event(event);
                	}
                 
                private slots:
                    void on_pushButton_clicked();
                 
                private:
                    Ui::MainWindow *ui;
                 
                    int Quit = 0;
                };
                 
                #endif // MAINWINDOW_H



                • Partager sur Facebook
                • Partager sur Twitter
                  2 février 2016 à 13:55:36

                  Le problème c'est que les fonctions spécifique au SpaceNavigatore tel que u.spwData.mData ne sont pas défini dans le mainwindow du coup ça me créer plusieurs erreurs, et comme dit précédemment je n'arrive pas à transférer le code en dehors du main.

                  Lors ce que je compile ce code j'obtiens beaucoup d'erreur et surtout des erreurs du type C2227, C2228 ....

                  Je me rends compte que c'est compliqué de vous demander une réponse mais n'est il pas possible d'accéder au "ui" directement du main ? 

                  -
                  Edité par Antoine Magalhaes 2 février 2016 à 13:56:13

                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 février 2016 à 14:12:25

                    Si tu peux accéder à ui depuis le main mais le main ne tourne pas en boucle. Ta boucle d’événement est au niveau de ta mainwindow.

                    Envoie ton main je te montrerais comment passer les event de ta souris 3D.

                    Voici le code pour accéder à ton ui dans ton main (utilise getUi()) mais ça ne changera rien.

                    #ifndef MAINWINDOW_H
                    #define MAINWINDOW_H
                      
                    #include <QMainWindow>
                      
                    namespace Ui {
                    class MainWindow;
                    }
                      
                    class MainWindow : public QMainWindow
                    {
                        Q_OBJECT
                      
                    public:
                        explicit MainWindow(QWidget *parent = 0);
                        ~MainWindow();
                     
                        Ui::MainWindow* getUi() {
                            return ui;
                        }
                    
                        bool event(QEvent* event) {
                            ui->TX->setPlainText(event->u.spwData.mData[SI_TX]);
                            ui->TY->setPlainText(event->u.spwData.mData[SI_TY]);
                            ui->TZ->setPlainText(event->u.spwData.mData[SI_TZ]);
                            ui->RX->setPlainText(event->u.spwData.mData[SI_RX]);
                            ui->RY->setPlainText(event->u.spwData.mData[SI_RY]);
                            ui->RZ->setPlainText(event->u.spwData.mData[SI_RZ]);
                            return QMainWindow::event(event);
                        }
                      
                    private slots:
                        void on_pushButton_clicked();
                      
                    private:
                        Ui::MainWindow *ui;
                      
                        int Quit = 0;
                    };
                      
                    #endif // MAINWINDOW_H



                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 février 2016 à 15:16:51

                      Euh ok par contre il est très long :

                      #define ACTOR_NAME SpaceNavigatorD2B
                      
                      #include "mainwindow.h"
                      #include "ui_mainwindow.h"
                      
                      #include <QtGui/QGuiApplication>
                      #include "qtquick2applicationviewer.h"
                      #include <QScreen>
                      #include <stdlib.h>
                      #include <stdio.h>
                      #include <QDebug>
                      
                      /* Standard Win32 Includes */
                      #include <windows.h>
                      #include <tchar.h>
                      #include <stdio.h>
                      #include <math.h>
                      #include <float.h>
                      #include <stdlib.h>
                      #include <crtdbg.h>
                      
                      #include <QFile>
                      #include <QApplication>
                      #include <QTextEdit>
                      #include <QString>
                      #include <QTextStream>
                      #include <QInputDialog>
                      #include <QIODevice>
                      #include <QMessageBox>
                      #include <QLCDNumber>
                      #include <QWidget>
                      #include <QPushButton>
                      
                      /* SpaceWare Specific Includes */
                      #include "spwmacro.h"  /* Common macros used by SpaceWare functions. */
                      #include "si.h"        /* Required for any SpaceWare support within an app.*/
                      #include "siapp.h"     /* Required for siapp.lib symbols */
                      #include "virtualkeys.hpp"
                      #include "3DxTest32.h"
                      
                      QtQuick2ApplicationViewer * myviewer = NULL;
                      
                      int main(int argc, char *argv[])
                      {
                          // WARNING : ORDER OF FOLLOWING OPERATIONS IS IMPORTANT, KEEP IT
                      
                          QApplication a(argc, argv);
                          QString programName = "SpaceNavigatorD2B";
                      
                          MainWindow w;
                          w.show();
                      
                          QtQuick2ApplicationViewer viewer;
                          myviewer = &viewer;
                          hWndMain = (HWND)myviewer->winId();
                      
                      
                          // register D2B
                          // a too low value for sleep paramter can reduce application performances
                      
                          viewer.setWidth(400);
                          viewer.setHeight(400);
                          QString root = qgetenv("root.path");
                      
                          // specify a qml file in command line
                          if (argc == 2)
                          {
                              qDebug() << " *** main qml file changed by " << argv[1];
                              viewer.setMainQmlFile(argv[1]);
                          }
                          else
                          {
                              viewer.setMainQmlFile(root+QStringLiteral("/Core/Qml/Applications/SpaceNavigatorD2B/main.qml"));
                          }
                      
                          //viewer.setTitle(programName);
                          //viewer.showExpanded();
                      
                          /* Initialize 3D mouse */
                          int res = SbInit();
                      
                          /* if 3D mouse was not detected then print error, close win., exit prog. */
                          if (res < 1)
                          {
                              MessageBox(hWndMain,
                                         _T("Sorry - No supported 3Dconnexion device available.\n"),
                                         NULL, MB_OK);
                      
                              if (hWndMain != NULL)
                              {
                                  DestroyWindow(hWndMain);    /* destroy window */
                              }
                      
                              ExitProcess(1);                /* exit program */
                          }
                          else
                          {
                              qDebug() << "3D mouse initialization OK";
                          }
                      
                          return DispatchLoopNT(); //app.exec();
                      }
                      
                      int SbInit()
                      {
                          int res;                             /* result of SiOpen, to be returned  */
                          SiOpenData oData;                    /* OS Independent data to open ball  */
                      
                          /*init the SpaceWare input library */
                          if (SiInitialize() == SPW_DLL_LOAD_ERROR)
                          {
                              MessageBox(hWndMain,_T("Error: Could not load SiAppDll dll files"),
                                         NULL, MB_ICONEXCLAMATION);
                          }
                      
                          SiOpenWinInit (&oData, hWndMain);    /* init Win. platform specific data  */
                          SiSetUiMode(devHdl, SI_UI_ALL_CONTROLS); /* Config SoftButton Win Display */
                      
                          /* open data, which will check for device type and return the device handle
                        to be used by this function */
                          if ( (devHdl = SiOpen ("3DxTest32", SI_ANY_DEVICE, SI_NO_MASK, SI_EVENT, &oData)) == NULL)
                          {
                      #if 0
                              SPWchar err[100];
                              extern enum SpwRetVal SpwErrorVal;
                              _stprintf(err,_T("SiOpen error: %d\n"),SpwErrorVal);
                              MessageBox(NULL,err,_T("3DxTest: SiOpen Error"),MB_ICONERROR);
                      #endif
                      
                              SiTerminate();  /* called to shut down the SpaceWare input library */
                              res = 0;        /* could not open device */
                              return res;
                          }
                          else
                          {
                              //SiGrabDevice(devHdl, SPW_TRUE);
                              SiDeviceName devName;
                              SiGetDeviceName(devHdl, &devName);
                              _stprintf(devicename,_T("%S"),devName.name);
                              res = 1;        /* opened device succesfully */
                              return res;
                          }
                      }
                      
                      /*--------------------------------------------------------------------------
                      * Function: DispatchLoopNT()
                      *
                      * Description:
                      *    This function contains the main message loop which constantly checks for
                      *    3D mouse Events and handles them apropriately.
                      *
                      * Args: None
                      *
                      *
                      * Return Value:
                      *    int  msg.wparam                  // event passed to window
                      *
                      *--------------------------------------------------------------------------*/
                      int DispatchLoopNT()
                      {
                          MSG            msg;      /* incoming message to be evaluated */
                          BOOL           handled;  /* is message handled yet */
                          SiSpwEvent     Event;    /* SpaceWare Event */
                          SiGetEventData EData;    /* SpaceWare Event Data */
                      
                          handled = SPW_FALSE;     /* init handled */
                      
                          /* start message loop */
                          while ( GetMessage( &msg, NULL, 0, 0 ) )
                          {
                              handled = SPW_FALSE;
                      
                              /* init Window platform specific data for a call to SiGetEvent */
                              SiGetEventWinInit(&EData, msg.message, msg.wParam, msg.lParam);
                      
                              /* check whether msg was a 3D mouse event and process it */
                              if (SiGetEvent (devHdl, SI_AVERAGE_EVENTS, &EData, &Event) == SI_IS_EVENT)
                              {
                                  if (Event.type == SI_MOTION_EVENT)
                                  {
                                      SbMotionEvent(&Event);        /* process 3D mouse motion event */
                                      //                qDebug() << "SI_MOTION_EVENT";
                                  }
                                  else if (Event.type == SI_ZERO_EVENT)
                                  {
                                      SbZeroEvent();                /* process 3D mouse zero event */
                                      //                qDebug() << "SI_ZERO_EVENT";
                                  }
                                  else if (Event.type == SI_BUTTON_PRESS_EVENT)
                                  {
                                      SbButtonPressEvent(Event.u.hwButtonEvent.buttonNumber);  /* process button press event */
                                  }
                                  else if (Event.type == SI_BUTTON_RELEASE_EVENT)
                                  {
                                      SbButtonReleaseEvent(Event.u.hwButtonEvent.buttonNumber); /* process button release event */
                                  }
                                  else if (Event.type == SI_DEVICE_CHANGE_EVENT)
                                  {
                                      HandleDeviceChangeEvent(&Event); /* process 3D mouse device change event */
                                  }
                      
                                  handled = SPW_TRUE;              /* 3D mouse event handled */
                              }
                      
                              /* not a 3D mouse event, let windows handle it */
                              if (handled == SPW_FALSE)
                              {
                                  TranslateMessage( &msg );
                                  DispatchMessage( &msg );
                              }
                          }
                      
                          return( (int) msg.wParam );
                      }
                      
                      /*--------------------------------------------------------------------------
                      * Function: HandleNTEvent
                      *
                      * Description:  This is a std. Win32 function to handle various window events
                      *
                      *
                      *
                      * Args: HWND hWnd                    // handle to window
                      *       unsigned msg                 // message to process
                      *       WPARAM wParam                // 32 bit msg parameter
                      *       LPARAM lParam                // 32 bit msg parameter
                      *
                      * Return Value:
                      *    int  msg.wparam                 // program done
                      *
                      *--------------------------------------------------------------------------*/
                      LRESULT WINAPI HandleNTEvent ( HWND hWnd, unsigned msg, WPARAM wParam,
                                                     LPARAM lParam )
                      {
                          PAINTSTRUCT ps;           /* used to paint the client area of a window */
                          LONG addr;                /* address of our window */
                      
                          addr = GetClassLong(hWnd, 0);  /* get address */
                      
                          switch ( msg )
                          {
                          case WM_ACTIVATEAPP:
                              hdc = GetDC(hWnd);
                              /* print buffers */
                              TextOut(hdc,  0 ,  20, devicename, (int)_tcslen(devicename));
                              TextOut(hdc, 15 , 100, _T("TX: 0"), 5);
                              TextOut(hdc, 15 , 120, _T("TY: 0"), 5);
                              TextOut(hdc, 15 , 140, _T("TZ: 0"), 5);
                              TextOut(hdc, 15 , 160, _T("RX: 0"), 5);
                              TextOut(hdc, 15 , 180, _T("RY: 0"), 5);
                              TextOut(hdc, 15 , 200, _T("RZ: 0"), 5);
                              TextOut(hdc, 15 , 220, _T(" P: 0"), 5);
                      
                              /*release our window handle */
                              ReleaseDC(hWnd,hdc);
                          case WM_KEYDOWN:
                          case WM_KEYUP:
                              /* user hit a key to close program */
                              if (wParam == VK_ESCAPE)
                              {
                                  SendMessage ( hWndMain, WM_CLOSE, 0, 0l );
                              }
                              break;
                      
                          case WM_PAINT:
                              /* time to paint the window */
                              if (addr)
                              {
                                  hdc = BeginPaint ( hWndMain, &ps );
                                  EndPaint ( hWndMain, &ps );
                              }
                      
                              break;
                      
                          case WM_CLOSE:
                              /* cleanup the object info created */
                      
                              break;
                      
                          case WM_DESTROY :
                              PostQuitMessage (0);
                              return (0);
                          }
                          return DefWindowProc ( hWnd, msg, wParam, lParam );
                      
                      }
                      
                      /*--------------------------------------------------------------------------
                      * Function: CreateSPWindow
                      *
                      * Description:  This creates the window for our app
                      *
                      *
                      *
                      * Args:  int  atx        // horiz. start point to put window
                      *        int  aty        // vert.  start point to put window
                      *        int  hi         // hight of window
                      *        int  wid        // width of window
                      *        char *string    // window caption
                      *
                      * Return Value:
                      *    NONE
                      *
                      *--------------------------------------------------------------------------*/
                      void CreateSPWindow (int atx, int aty, int hi, int wid, TCHAR *string)
                      {
                          WNDCLASS  wndclass;     /* our own instance of the window class */
                          HINSTANCE hInst;        /* handle to our instance */
                      
                          hInst = NULL;             /* init handle */
                      
                          /* Register display window class */
                          wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
                          wndclass.lpfnWndProc   = (WNDPROC)HandleNTEvent ;
                          wndclass.cbClsExtra    = 8 ;
                          wndclass.cbWndExtra    = 0 ;
                          wndclass.hInstance     = hInst;
                          wndclass.hIcon         = NULL;
                          wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
                          wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
                          wndclass.lpszMenuName  = NULL ;
                          wndclass.lpszClassName = _T("3DxTest32");
                      
                          RegisterClass (&wndclass) ;
                      
                          /* create the window */
                          hWndMain = CreateWindow ( _T("3DxTest32"),           /*Window class name*/
                                                    string,              /*Window caption*/
                                                    WS_OVERLAPPEDWINDOW, /*Window Style*/
                                                    atx,aty,wid,hi,
                                                    NULL,	               /*parent window handle*/
                                                    NULL,                /*window menu handle*/
                                                    hInst,		         /*program instance handle*/
                                                    NULL);               /*creation parameters*/
                      
                          /* display the window */
                          ShowWindow ( hWndMain, SW_SHOW );
                      
                          /* get handle of our window to draw on */
                          hdc = GetDC(hWndMain);
                      
                          /* print buffers */
                          TextOut(hdc, 0  ,  20, devicename, (int)_tcslen(devicename));
                          TextOut(hdc, 15 , 100, _T("TX: 0"), 5);
                          TextOut(hdc, 15 , 120, _T("TY: 0"), 5);
                          TextOut(hdc, 15 , 140, _T("TZ: 0"), 5);
                          TextOut(hdc, 15 , 160, _T("RX: 0"), 5);
                          TextOut(hdc, 15 , 180, _T("RY: 0"), 5);
                          TextOut(hdc, 15 , 200, _T("RZ: 0"), 5);
                          TextOut(hdc, 15 , 220, _T(" P: 0"), 5);
                      
                      
                      
                          /*release our window handle */
                          ReleaseDC(hWndMain,hdc);
                      
                          UpdateWindow ( hWndMain );
                      
                      } /* end of CreateWindow */
                      
                      /*----------------------------------------------------------------------
                      * Function: SbMotionEvent()
                      *
                      * Description:
                      *    This function receives motion information and prints out the info
                      *    on screen.
                      *
                      *
                      * Args:
                      *    SiSpwEvent *pEvent   Containts Data from a 3D mouse Event
                      *
                      * Return Value:
                      *    NONE
                      *
                      *----------------------------------------------------------------------*/
                      void SbMotionEvent(SiSpwEvent *pEvent)
                      {
                          //    TCHAR buff0[30];                            /* text buffer for TX */
                          //    TCHAR buff1[30];                            /* text buffer for TY */
                          //    TCHAR buff2[30];                            /* text buffer for TZ */
                          //    TCHAR buff3[30];                            /* text buffer for RX */
                          //    TCHAR buff4[30];                            /* text buffer for RY */
                          //    TCHAR buff5[30];                            /* text buffer for RZ */
                          //    TCHAR buff6[30];                            /* text buffer for Period */
                      
                          //    int len0,len1,len2,len3,len4,len5,len6;	   /* length of each buffer */
                      
                          /* put the actual ball data into the buffers */
                          //    len0 = _stprintf(buff0, _T("TX: %d         "), pEvent->u.spwData.mData[SI_TX]);
                          //    len1 = _stprintf(buff1, _T("TY: %d         "), pEvent->u.spwData.mData[SI_TY]);
                          //    len2 = _stprintf(buff2, _T("TZ: %d         "), pEvent->u.spwData.mData[SI_TZ]);
                          //    len3 = _stprintf(buff3, _T("RX: %d         "), pEvent->u.spwData.mData[SI_RX]);
                          //    len4 = _stprintf(buff4, _T("RY: %d         "), pEvent->u.spwData.mData[SI_RY]);
                          //    len5 = _stprintf(buff5, _T("RZ: %d         "), pEvent->u.spwData.mData[SI_RZ]);
                          //    len6 = _stprintf(buff6, _T(" P: %d         "), pEvent->u.spwData.period);
                      
                          // TEST - DSS writing
                      
                      
                          int i = 0;
                          while(i<7)
                          {
                              QFile f("test.txt");
                              if(!f.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Append))
                                  QMessageBox::critical(NULL,"Erreur","Erreur !!!");
                              QTextStream out(&f);
                      
                              switch (i) {
                              case 0: out << pEvent->u.spwData.mData[SI_TX];
                                  break;
                              case 1: out << ":" << pEvent->u.spwData.mData[SI_TY];
                                  break;
                              case 2: out << ":" << pEvent->u.spwData.mData[SI_TZ];
                                  break;
                              case 3: out << ":" << pEvent->u.spwData.mData[SI_RX];
                                  break;
                              case 4: out << ":" << pEvent->u.spwData.mData[SI_RY];
                                  break;
                              case 5: out << ":" << pEvent->u.spwData.mData[SI_RZ];
                                  break;
                              case 6: out << ":" << pEvent->u.spwData.period << endl;
                                  break;
                              default:
                                  break;
                              }
                      
                              f.close();
                              i++;
                          }
                      
                      
                          // END TEST
                      
                          /* get handle of our window to draw on */
                          //    hdc = GetDC(hWndMain);
                      
                          /* print buffers */
                          //    TCHAR *buf = _T("Motion Event              ");
                          //    TextOut(hdc,  0 ,   0, buf, (int)_tcslen(buf));
                          //    TextOut(hdc,  0 ,  20, devicename, (int)_tcslen(devicename));
                          //    TextOut(hdc, 15 , 100, buff0, len0);
                          //    TextOut(hdc, 15 , 120, buff1, len1);
                          //    TextOut(hdc, 15 , 140, buff2, len2);
                          //    TextOut(hdc, 15 , 160, buff3, len3);
                          //    TextOut(hdc, 15 , 180, buff4, len4);
                          //    TextOut(hdc, 15 , 200, buff5, len5);
                          //    TextOut(hdc, 15 , 220, buff6, len6);
                      
                          /* Dump to debugger output buffer to get a running log */
                          //    _RPT3(_CRT_WARN,"%S %S %S",  buff0, buff1, buff2);
                          //    _RPT3(_CRT_WARN," %S %S %S", buff3, buff4, buff5);
                          //    _RPT1(_CRT_WARN," %S\n", buff6);
                      
                          // Also dump to stdout for a searchable log
                          //    printf("%d %d %d %d %d %d\n",
                          //           pEvent->u.spwData.mData[SI_TX],
                          //           pEvent->u.spwData.mData[SI_TY],
                          //           pEvent->u.spwData.mData[SI_TZ],
                          //           pEvent->u.spwData.mData[SI_RX],
                          //           pEvent->u.spwData.mData[SI_RY],
                          //           pEvent->u.spwData.mData[SI_RZ]);
                      
                          /*release our window handle */
                          //    ReleaseDC(hWndMain,hdc);
                      }
                      
                      /*----------------------------------------------------------------------
                      * Function: SbZeroEvent()
                      *
                      * Description:
                      *    This function clears the previous data, no motion data was received
                      *
                      *
                      *
                      * Args:
                      *    NONE
                      *
                      * Return Value:
                      *    NONE
                      *
                      *----------------------------------------------------------------------*/
                      void SbZeroEvent()
                      {
                          /* get handle of our window to draw on */
                          //    hdc = GetDC(hWndMain);
                      
                          /* print null data */
                          //    TextOut(hdc,  0 ,   0, _T("Zero Event                  "), 28);
                          //    TextOut(hdc,  0 ,  20, devicename, (int)_tcslen(devicename));
                          //    TextOut(hdc, 15 , 100, _T("TX: 0          "), 15);
                          //    TextOut(hdc, 15 , 120, _T("TY: 0          "), 15);
                          //    TextOut(hdc, 15 , 140, _T("TZ: 0          "), 15);
                          //    TextOut(hdc, 15 , 160, _T("RX: 0          "), 15);
                          //    TextOut(hdc, 15 , 180, _T("RY: 0          "), 15);
                          //    TextOut(hdc, 15 , 200, _T("RZ: 0          "), 15);
                          //    TextOut(hdc, 15 , 220, _T(" P: 0          "), 15);
                      
                          // TEST - DSS writing
                          QFile f("test.txt");
                          int i = 0;
                          while(i<7)
                          {
                              if(!f.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Append))
                                  QMessageBox::critical(NULL,"Erreur","Erreur !!!");
                      
                              QTextStream out(&f);
                      
                              switch (i) {
                              case 0: out << "0";
                                  break;
                              case 1: out << ":" << "0";
                                  break;
                              case 2: out << ":" << "0";
                                  break;
                              case 3: out << ":" << "0";
                                  break;
                              case 4: out << ":" << "0";
                                  break;
                              case 5: out << ":" << "0";
                                  break;
                              case 6: out << ":" << "0" << endl;
                                  break;
                              default:
                                  break;
                              }
                      
                              f.close();
                              i++;
                           }
                          // END TEST
                      
                          /*release our window handle */
                          //   ReleaseDC(hWndMain,hdc);
                      }
                      
                      /*----------------------------------------------------------------------
                      * Function: SbButtonPressEvent()
                      *
                      * Description:
                      *    This function receives 3D mouse button information and prints out the
                      *    info on screen.
                      *
                      *
                      * Args:
                      *    int     buttonnumber   //Containts number of button pressed
                      *
                      * Return Value:
                      *    NONE
                      *
                      *----------------------------------------------------------------------*/
                      void SbButtonPressEvent(int buttonnumber)
                      {
                          TCHAR bn[100];
                      
                          /* get handle of our window to draw on */
                          hdc = GetDC(hWndMain);
                      
                          /* print button pressed (does not include rezero button) */
                          switch (buttonnumber)
                          {
                          case s3dm::V3DK_MENU: _tcscpy(bn, _T("V3DK_MENU")); break;
                          case s3dm::V3DK_FIT: _tcscpy(bn, _T("V3DK_FIT")); break;
                          case s3dm::V3DK_TOP: _tcscpy(bn, _T("V3DK_TOP")); break;
                          case s3dm::V3DK_LEFT: _tcscpy(bn, _T("V3DK_LEFT")); break;
                          case s3dm::V3DK_RIGHT: _tcscpy(bn, _T("V3DK_RIGHT")); break;
                          case s3dm::V3DK_FRONT: _tcscpy(bn, _T("V3DK_FRONT")); break;
                          case s3dm::V3DK_BOTTOM: _tcscpy(bn, _T("V3DK_BOTTOM")); break;
                          case s3dm::V3DK_BACK: _tcscpy(bn, _T("V3DK_BACK")); break;
                          case s3dm::V3DK_ROLL_CW: _tcscpy(bn, _T("V3DK_ROLL_CW")); break;
                          case s3dm::V3DK_ROLL_CCW: _tcscpy(bn, _T("V3DK_ROLL_CCW")); break;
                          case s3dm::V3DK_ISO1: _tcscpy(bn, _T("V3DK_ISO1")); break;
                          case s3dm::V3DK_ISO2: _tcscpy(bn, _T("V3DK_ISO2")); break;
                          case s3dm::V3DK_1: _tcscpy(bn, _T("V3DK_1")); break;
                          case s3dm::V3DK_2: _tcscpy(bn, _T("V3DK_2")); break;
                          case s3dm::V3DK_3: _tcscpy(bn, _T("V3DK_3")); break;
                          case s3dm::V3DK_4: _tcscpy(bn, _T("V3DK_4")); break;
                          case s3dm::V3DK_5: _tcscpy(bn, _T("V3DK_5")); break;
                          case s3dm::V3DK_6: _tcscpy(bn, _T("V3DK_6")); break;
                          case s3dm::V3DK_7: _tcscpy(bn, _T("V3DK_7")); break;
                          case s3dm::V3DK_8: _tcscpy(bn, _T("V3DK_8")); break;
                          case s3dm::V3DK_9: _tcscpy(bn, _T("V3DK_9")); break;
                          case s3dm::V3DK_10: _tcscpy(bn, _T("V3DK_10")); break;
                          case s3dm::V3DK_ESC: _tcscpy(bn, _T("V3DK_ESC")); break;
                          case s3dm::V3DK_ALT: _tcscpy(bn, _T("V3DK_ALT")); break;
                          case s3dm::V3DK_SHIFT: _tcscpy(bn, _T("V3DK_SHIFT")); break;
                          case s3dm::V3DK_CTRL: _tcscpy(bn, _T("V3DK_CTRL")); break;
                          case s3dm::V3DK_ROTATE: _tcscpy(bn, _T("V3DK_ROTATE")); break;
                          case s3dm::V3DK_PANZOOM: _tcscpy(bn, _T("V3DK_PANZOOM")); break;
                          case s3dm::V3DK_DOMINANT: _tcscpy(bn, _T("V3DK_DOMINANT")); break;
                          case s3dm::V3DK_PLUS: _tcscpy(bn, _T("V3DK_PLUS")); break;
                          case s3dm::V3DK_MINUS: _tcscpy(bn, _T("V3DK_MINUS")); break;
                          case s3dm::V3DK_SPIN_CW: _tcscpy(bn, _T("V3DK_SPIN_CW")); break;
                          case s3dm::V3DK_SPIN_CCW: _tcscpy(bn, _T("V3DK_SPIN_CCW")); break;
                          case s3dm::V3DK_TILT_CW: _tcscpy(bn, _T("V3DK_TILT_CW")); break;
                          case s3dm::V3DK_TILT_CCW: _tcscpy(bn, _T("V3DK_TILT_CCW")); break;
                          case s3dm::V3DK_BUTTON_UI: _tcscpy(bn, _T("V3DK_BUTTON_UI")); break;
                      
                          default:
                              // Put unrecognized buttons in parens
                              _stprintf(bn,_T("(button %d)"), buttonnumber);
                              break;
                          }
                      
                          wchar_t fullStr[100];
                          wcscpy(fullStr,_T("-------------------------------------------------------"));
                          TextOut(hdc, 0 , 0, fullStr, (int)_tcslen(fullStr));
                      
                          _stprintf(fullStr,_T("%s Pressed"),bn);
                          TextOut(hdc, 0 , 0, fullStr, (int)_tcslen(fullStr));
                      
                          // Output to stdout for tracing
                          printf("%S\n",fullStr);
                      
                          /*release our window handle */
                          ReleaseDC(hWndMain,hdc);
                      }
                      
                      /*----------------------------------------------------------------------
                      * Function: SbButtonReleaseEvent()
                      *
                      * Description:
                      *    This function receives 3D mouse button information and prints out the
                      *    info on screen.
                      *
                      *
                      * Args:
                      *    int     buttonnumber   //Containts number of button pressed
                      *
                      * Return Value:
                      *    NONE
                      *
                      *----------------------------------------------------------------------*/
                      void SbButtonReleaseEvent(int buttonnumber)
                      {
                          TCHAR bn[100];
                      
                          /* get handle of our window to draw on */
                          hdc = GetDC(hWndMain);
                      
                          /* print button pressed (does not include rezero button) */
                          switch (buttonnumber)
                          {
                          case s3dm::V3DK_MENU: _tcscpy(bn, _T("V3DK_MENU")); break;
                          case s3dm::V3DK_FIT: _tcscpy(bn, _T("V3DK_FIT")); break;
                          case s3dm::V3DK_TOP: _tcscpy(bn, _T("V3DK_TOP")); break;
                          case s3dm::V3DK_LEFT: _tcscpy(bn, _T("V3DK_LEFT")); break;
                          case s3dm::V3DK_RIGHT: _tcscpy(bn, _T("V3DK_RIGHT")); break;
                          case s3dm::V3DK_FRONT: _tcscpy(bn, _T("V3DK_FRONT")); break;
                          case s3dm::V3DK_BOTTOM: _tcscpy(bn, _T("V3DK_BOTTOM")); break;
                          case s3dm::V3DK_BACK: _tcscpy(bn, _T("V3DK_BACK")); break;
                          case s3dm::V3DK_ROLL_CW: _tcscpy(bn, _T("V3DK_ROLL_CW")); break;
                          case s3dm::V3DK_ROLL_CCW: _tcscpy(bn, _T("V3DK_ROLL_CCW")); break;
                          case s3dm::V3DK_ISO1: _tcscpy(bn, _T("V3DK_ISO1")); break;
                          case s3dm::V3DK_ISO2: _tcscpy(bn, _T("V3DK_ISO2")); break;
                          case s3dm::V3DK_1: _tcscpy(bn, _T("V3DK_1")); break;
                          case s3dm::V3DK_2: _tcscpy(bn, _T("V3DK_2")); break;
                          case s3dm::V3DK_3: _tcscpy(bn, _T("V3DK_3")); break;
                          case s3dm::V3DK_4: _tcscpy(bn, _T("V3DK_4")); break;
                          case s3dm::V3DK_5: _tcscpy(bn, _T("V3DK_5")); break;
                          case s3dm::V3DK_6: _tcscpy(bn, _T("V3DK_6")); break;
                          case s3dm::V3DK_7: _tcscpy(bn, _T("V3DK_7")); break;
                          case s3dm::V3DK_8: _tcscpy(bn, _T("V3DK_8")); break;
                          case s3dm::V3DK_9: _tcscpy(bn, _T("V3DK_9")); break;
                          case s3dm::V3DK_10: _tcscpy(bn, _T("V3DK_10")); break;
                          case s3dm::V3DK_ESC: _tcscpy(bn, _T("V3DK_ESC")); break;
                          case s3dm::V3DK_ALT: _tcscpy(bn, _T("V3DK_ALT")); break;
                          case s3dm::V3DK_SHIFT: _tcscpy(bn, _T("V3DK_SHIFT")); break;
                          case s3dm::V3DK_CTRL: _tcscpy(bn, _T("V3DK_CTRL")); break;
                          case s3dm::V3DK_ROTATE: _tcscpy(bn, _T("V3DK_ROTATE")); break;
                          case s3dm::V3DK_PANZOOM: _tcscpy(bn, _T("V3DK_PANZOOM")); break;
                          case s3dm::V3DK_DOMINANT: _tcscpy(bn, _T("V3DK_DOMINANT")); break;
                          case s3dm::V3DK_PLUS: _tcscpy(bn, _T("V3DK_PLUS")); break;
                          case s3dm::V3DK_MINUS: _tcscpy(bn, _T("V3DK_MINUS")); break;
                          case s3dm::V3DK_SPIN_CW: _tcscpy(bn, _T("V3DK_SPIN_CW")); break;
                          case s3dm::V3DK_SPIN_CCW: _tcscpy(bn, _T("V3DK_SPIN_CCW")); break;
                          case s3dm::V3DK_TILT_CW: _tcscpy(bn, _T("V3DK_TILT_CW")); break;
                          case s3dm::V3DK_TILT_CCW: _tcscpy(bn, _T("V3DK_TILT_CCW")); break;
                          case s3dm::V3DK_BUTTON_UI: _tcscpy(bn, _T("V3DK_BUTTON_UI")); break;
                      
                          default:
                              // Put unrecognized buttons in parens
                              _stprintf(bn,_T("(button %d)"), buttonnumber);
                              break;
                          }
                      
                          wchar_t fullStr[100];
                          wcscpy(fullStr,_T("--------------------------------------------------------"));
                          TextOut(hdc, 0 , 0, fullStr, (int)_tcslen(fullStr));
                      
                          _stprintf(fullStr,_T("%s Released"),bn);
                          TextOut(hdc, 0 , 0, fullStr, (int)_tcslen(fullStr));
                      
                          // Output to stdout for tracing
                          printf("%S\n",fullStr);
                      
                          /*release our window handle */
                          ReleaseDC(hWndMain,hdc);
                      }
                      
                      void HandleDeviceChangeEvent(SiSpwEvent *pEvent)
                      {
                          TCHAR buf[100];
                          hdc = GetDC(hWndMain);
                      
                          switch(pEvent->u.deviceChangeEventData.type)
                          {
                          case SI_DEVICE_CHANGE_CONNECT:
                              _stprintf(buf,_T("Device ID %d connected"),pEvent->u.deviceChangeEventData.devID);
                              TextOut(hdc, 0, 20, buf, (int)_tcslen(buf));
                              break;
                          case SI_DEVICE_CHANGE_DISCONNECT:
                              _stprintf(buf,_T("Device ID %d disconnected"),pEvent->u.deviceChangeEventData.devID);
                              TextOut(hdc, 0, 20, buf, (int)_tcslen(buf));
                              break;
                          default:
                              _stprintf(buf,_T("Unknown deviceChangeEvent type: %d"),pEvent->u.deviceChangeEventData.type);
                              TextOut(hdc, 0, 20, buf, (int)_tcslen(buf));
                              break;
                          }
                          ReleaseDC(hWndMain,hdc);
                      }
                      



                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 février 2016 à 15:58:27

                        Haha du copier collé ^^

                        Bon puisque tu es parti sur du code crade et que tu n'as pas peur des variables globales allons y !

                        Ceci devrais marcher mais c'est dégelasse :D

                        #include "spwmacro.h"  /* Common macros used by SpaceWare functions. */
                        #include "si.h"        /* Required for any SpaceWare support within an app.*/
                        #include "siapp.h"     /* Required for siapp.lib symbols */
                        #include "virtualkeys.hpp"
                        #include "3DxTest32.h"
                         
                        QtQuick2ApplicationViewer * myviewer = NULL;
                        MainWindow w;
                         
                        int main(int argc, char *argv[])
                        {
                            // WARNING : ORDER OF FOLLOWING OPERATIONS IS IMPORTANT, KEEP IT
                         
                            QApplication a(argc, argv);
                            QString programName = "SpaceNavigatorD2B";
                         
                            
                            w.show();
                         
                            QtQuick2ApplicationViewer viewer;
                            myviewer = &viewer;
                            hWndMain = (HWND)myviewer->winId();
                        //...
                           
                        void SbMotionEvent(SiSpwEvent *pEvent) {
                                
                                w.getUi()->TX->setPlainText(event->u.spwData.mData[SI_TX]);
                                w.getUi()->TY->setPlainText(event->u.spwData.mData[SI_TY]);
                                w.getUi()->TZ->setPlainText(event->u.spwData.mData[SI_TZ]);
                                w.getUi()->RX->setPlainText(event->u.spwData.mData[SI_RX]);
                                w.getUi()->RY->setPlainText(event->u.spwData.mData[SI_RY]);
                                w.getUi()->RZ->setPlainText(event->u.spwData.mData[SI_RZ]);
                         
                               
                            }



                        -
                        Edité par robinson des bois 2 février 2016 à 16:39:47

                        • Partager sur Facebook
                        • Partager sur Twitter
                          3 février 2016 à 8:37:44

                          Bonjour ! 

                          Merci pour ta réponse mais ça ne fonctionne toujours pas :/. Je n'ai pas de problème au niveau du main pour le bout de code que j'ai rajouté mais c'est dans le mainwindow.h que tout va mal ^^'

                          dans le mainwindow.h :

                          Le problème je pense c'est qu'il ne récupère toujours pas les fonctions du main donc par exemple u.spwData.mData lui est inconnu.

                          Merci d'avance pour ton aide !

                          -
                          Edité par Antoine Magalhaes 3 février 2016 à 9:19:23

                          • Partager sur Facebook
                          • Partager sur Twitter
                            3 février 2016 à 8:44:33

                            Je viens juste de tenter de remplacer les "event" par des "pEvent" (dans le mainwindow et le main) et dans le main.cpp les fonctions "u.spwData.mData" sont devenu rouge. Mais au final j'ai autant d'erreur et au même endroit qu'avant. ET aussi je viens de découvrir que c'est des variable de type 'long' que je recevais et c'est pourquoi je les affiche sur un LCDNumber maintenant.

                            -
                            Edité par Antoine Magalhaes 3 février 2016 à 9:21:24

                            • Partager sur Facebook
                            • Partager sur Twitter
                              3 février 2016 à 10:00:49

                              Non garde ton fichier MainWindow en rajoutant juste la fonction getUi();

                              Après modifie ton main en utilisant les modif de mon msg précédant.

                              -
                              Edité par robinson des bois 3 février 2016 à 10:00:59

                              • Partager sur Facebook
                              • Partager sur Twitter
                                3 février 2016 à 10:40:26

                                Mais j'ai déjà modifié le main par rapport à ton message précédent et il n'y a pas de problème au niveau du main, par contre sur le mainwindow.h ya les erreurs montrées plus haut. Quand tu dis de rajouter la fonction getUi() ce n'est pas ce que j'ai fait plus haut ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  3 février 2016 à 10:58:23

                                  Autant pour moi, du coup ça compil bien mais une fenêtre d'erreur s'ouvre car on créer un widget avant QApplication. C'est le MainWindow w au dessus du int main(...) qui pose problème. :euh:

                                  -
                                  Edité par Antoine Magalhaes 3 février 2016 à 11:01:49

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    3 février 2016 à 14:04:26

                                    A oui pardons.

                                    MainWindow* w;
                                      
                                    int main(int argc, char *argv[])
                                    {
                                        // WARNING : ORDER OF FOLLOWING OPERATIONS IS IMPORTANT, KEEP IT
                                      
                                        QApplication a(argc, argv);
                                        QString programName = "SpaceNavigatorD2B";
                                      
                                        w = new MainWindow;
                                        w.show();
                                    
                                    //...



                                    -
                                    Edité par robinson des bois 3 février 2016 à 14:04:42

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      3 février 2016 à 14:20:11

                                      Merci !!!!

                                      Ça fonctionne !! Juste j'ai du mettre w->show() et w->getUi() mais maintenant ça affiche en continu la position de ma sourie 3D !

                                      Merci beaucoup pour ta patience :) !

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        3 février 2016 à 14:28:56

                                        Pas de soucis ^^

                                        Par contre fait gaffe le code est crade :D

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Fichier texte QT

                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                        • Editeur
                                        • Markdown