Hola, estoy haciendo un proyecto con QT, VTK en VS 2008 C++
El proyecto consiste en mover un objeto 3D, en este caso una mano con un dispositivo haptico, en este caso un guante. ya tengo la comunicación con mi guante y trabaja bien. Mi problema es con QT, en e programa quiero que cuando yo de click en un "pushbutton" este me de via a la conexión del dispositivo y empiece el movimiento de la mano, hasta ahora esta una parte trabajando, porque cuando le doy click en pushbutton efectivamente va se conecta y empieza amover la mano, pero la ventana grande de QT, la gui como tal se bloquea. en realidad creo es por la forma en que tengo la comunicacion para que sea constante que esta dentro de un while, pero supongo genera conflicto con el ciclo infinito de la misma gui.Pero no se que hacer y no se como utilizar los eventos. (lamentablemente mis bases y conocimiento en programación no son los mejores)
MI CODIGO es el siguiente:
MAIN:
#include
#include “leer.h”
#include “SerialClass.h”
int main(int argc, char *argv[])
{ QApplication a(argc, argv); leer w; w.show();
return a.exec(); }
LEER.cpp
#include “leer.h”
#include “ui_leer.h”
#include “SerialClass.h”
#include
#include “vtkPNGReader.h”
#include
#include
#include
#include
#include
#include
#include “TSerial.h”
leer::leer(QWidget *parent) : QMainWindow(parent),ui(new Ui::leer)
{ ui->setupUi(this);
renderer = vtkRenderer::New();
estilo = vtkInteractorStyleTrackballCamera::New();
iren = vtkRenderWindowInteractor::New();
renderer->SetBackground(0.043,0.18,0.58);
renderer->SetBackground2(0,0,0);
iren->SetInteractorStyle(estilo);
cargar_mano();
renderer->AddActor(articulaciones0);
renderer->ResetCamera();
ui->Renderizado->GetRenderWindow()->Render();
ui->Renderizado->GetRenderWindow()->AddRenderer(renderer);
ui->Renderizado->GetRenderWindow()->SetInteractor(iren);
ui->Renderizado->GetRenderWindow()->Render();
connect(ui->pushButton, SIGNAL),SLOT (conexion()));
}
void leer::conexion()
{
// cout<<“Welcome to the serial test app!\n\n”;
Serial* SP = new Serial(”\\\\.\\COM3”); // adjust as needed
if (SP->IsConnected())
cout<<“We’re connected”;
char incomingData256 = “10”; // don’t forget to pre-allocate memory
printf(”%s \n”,incomingData);
int dataLength = 4;
int readResult = 0;
while(SP->IsConnected())
{
readResult = SP->ReadData(incomingData,dataLength);
printf(“Bytes read: (-1 means no data available) %i \n”,readResult);
std::string test=incomingData;
printf(”%s \n”,incomingData);
//test = “”;
int value=atoi(test.c_str());
printf(”%i \n”,value);
articulaciones[12]->SetOrientation(value,0,0);
ui->Renderizado->GetRenderWindow()->Render();
Sleep(100);
}
}
El proyecto consiste en mover un objeto 3D, en este caso una mano con un dispositivo haptico, en este caso un guante. ya tengo la comunicación con mi guante y trabaja bien. Mi problema es con QT, en e programa quiero que cuando yo de click en un "pushbutton" este me de via a la conexión del dispositivo y empiece el movimiento de la mano, hasta ahora esta una parte trabajando, porque cuando le doy click en pushbutton efectivamente va se conecta y empieza amover la mano, pero la ventana grande de QT, la gui como tal se bloquea. en realidad creo es por la forma en que tengo la comunicacion para que sea constante que esta dentro de un while, pero supongo genera conflicto con el ciclo infinito de la misma gui.Pero no se que hacer y no se como utilizar los eventos. (lamentablemente mis bases y conocimiento en programación no son los mejores)
MI CODIGO es el siguiente:
MAIN:
#include
#include “leer.h”
#include “SerialClass.h”
int main(int argc, char *argv[])
{ QApplication a(argc, argv); leer w; w.show();
return a.exec(); }
LEER.cpp
#include “leer.h”
#include “ui_leer.h”
#include “SerialClass.h”
#include
#include “vtkPNGReader.h”
#include
#include
#include
#include
#include
#include
#include “TSerial.h”
leer::leer(QWidget *parent) : QMainWindow(parent),ui(new Ui::leer)
{ ui->setupUi(this);
renderer = vtkRenderer::New();
estilo = vtkInteractorStyleTrackballCamera::New();
iren = vtkRenderWindowInteractor::New();
renderer->SetBackground(0.043,0.18,0.58);
renderer->SetBackground2(0,0,0);
iren->SetInteractorStyle(estilo);
cargar_mano();
renderer->AddActor(articulaciones0);
renderer->ResetCamera();
ui->Renderizado->GetRenderWindow()->Render();
ui->Renderizado->GetRenderWindow()->AddRenderer(renderer);
ui->Renderizado->GetRenderWindow()->SetInteractor(iren);
ui->Renderizado->GetRenderWindow()->Render();
connect(ui->pushButton, SIGNAL),SLOT (conexion()));
}
void leer::conexion()
{
// cout<<“Welcome to the serial test app!\n\n”;
Serial* SP = new Serial(”\\\\.\\COM3”); // adjust as needed
if (SP->IsConnected())
cout<<“We’re connected”;
char incomingData256 = “10”; // don’t forget to pre-allocate memory
printf(”%s \n”,incomingData);
int dataLength = 4;
int readResult = 0;
while(SP->IsConnected())
{
readResult = SP->ReadData(incomingData,dataLength);
printf(“Bytes read: (-1 means no data available) %i \n”,readResult);
std::string test=incomingData;
printf(”%s \n”,incomingData);
//test = “”;
int value=atoi(test.c_str());
printf(”%i \n”,value);
articulaciones[12]->SetOrientation(value,0,0);
ui->Renderizado->GetRenderWindow()->Render();
Sleep(100);
}
}